Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

Integer.parseIntについて

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

class Hizuke extends Container{
    JTextField year_text  = new JTextField(4);    /* 計算前の年を入力するフィールド */
    JTextField month_text = new JTextField(2);    /* 計算前の月を入力するフィールド */
    JTextField day_text   = new JTextField(2);    /* 計算前の日を入力するフィールド */
    JLabel nen = new JLabel("年");            /* 年を表示させるフィールド */
    JLabel gatsu = new JLabel("月");        /* 月を表示させるフィールド */
    JLabel nichi = new JLabel("日");        /* 日を表示させるフィールド */

    public boolean marked(){
        if(year_text.getText().equals("") &&
           month_text.getText().equals("") &&
           day_text.getText().equals("")
          ){
            return true;
        }
        else{
            return false;
        }
    }

    public Hizuke(){
        setLayout(new FlowLayout());        /* 年月日の表示形式「xxxx年xx月xx日」 */
        add(year_text);
        add(nen);
        add(month_text);
        add(gatsu);
        add(day_text);
        add(nichi);
    }
}

class Nissuukeisan extends JFrame{
    JLabel text1 = new JLabel("から");        /* 表示テキスト */
    JLabel text2 = new JLabel("日後は");        /* 表示テキスト */
    JTextField period_text = new JTextField(6);    /* 前後の期間を入力するフィールド */
    JButton calculate_button = new JButton("計算");    /* 計算用ボタン */

    Hizuke before_date = new Hizuke();        /* 変更前の日付を入力するフィールド(宣言) */
    Hizuke after_date  = new Hizuke();        /* 変更後の日付を入力するフィールド(宣言) */

    public Nissuukeisan(){
        getContentPane().setLayout(new FlowLayout());    /* 入力窓表示形式「xxxx年xx月xx日からxxxxxx日後はxxxx年xx月xx日」 */
        getContentPane().add(before_date);
        getContentPane().add(text1);
        getContentPane().add(period_text);
        getContentPane().add(text2);
        getContentPane().add(after_date);
        getContentPane().add(calculate_button);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);    /* CLOSEボタンが押された時の動作 */

        calculate_button.addActionListener(new ActionListener(){        /* 計算ボタンが押された時の動作 */
            public void actionPerformed(ActionEvent evt){

                /* 変数宣言 */
                int before_year,before_month,before_day;        /* 変更前の年月日(int型) */
                int after_year,after_month,after_day;            /* 変更後の年月日(int型) */
                int period;                        /* 期間(int型) */
                /* 一月の日数。平年と閏年 */
                int month[][] = {
                    {31,28,31,30,31,30,31,31,30,31,30,31},
                    {31,29,31,30,31,30,31,31,30,31,30,31}
                };
                int before_leap = 0,after_leap = 0;            /* 一月の日数配列の使用する配列用変数 0:平年、1:閏年 */
                int cnt;                        /* ループカウンタ用変数 */
                int period_year,period_month,period_day,period_b_day,period_a_day;    /* 期間計算用変数 */
                /* 変数宣言end */

                /* 文字列→数値 */
                before_year = Integer.parseInt(before_data.year_text.getText());    /* 変更前の年を取得 */
                before_month = Integer.parseInt(before_data.month_text.getText());    /* 変更前の月を取得 */
                before_day = Integer.parseInt(before_data.day_text.getText());        /* 変更前の日を取得 */
                after_year = Integer.parseInt(after_data.year_text.getText());        /* 変更後の年を取得 */
                after_month = Integer.parseInt(after_data.month_text.getText());    /* 変更後の月を取得 */
                after_day = Integer.parseInt(after_data.day_text.getText());        /* 変更後の日を取得 */
                period = Integer.parseInt(period_text.getText());            /* 期間を取得 */
                /* 文字列→数値end */

はじめまして、JAVAを始めたばかりの初心者です。
日付と期間を入れると、その期間後の日付を表示させるプログラムを組もうとしているのですが、
上記の最後「文字列→数値」の個所で
「Saisyuu1.java:73: パッケージ before_data は存在しません。
                                before_year = Integer.parseInt(before_data.year_
text.getText());        /* 変更前の年を取得 */」
というコンパイルエラーが出てしまいます。
before_dataがpublicではないせいかとも思ったのですが、違うようで行き詰っています。

申し訳ありませんが、どなたかお教えください
よろしくお願いいたします

3

回答

5344

閲覧

3件の回答

評価

0

パッケージ before_data は存在しません。

これが、何を言っているか考えてみてください。
Javaの出すエラーメッセージは、いつも正しいことを言っているとは限りません。

本来なら、「変数〜」と言って来るところが「パッケージ〜」になっていますよね?
つまり、Javaには変数と見られていないわけです。
ソースをよーく見て、なんで変数と認識されてないか確認してください。

ここをクリアしてもいろいろ問題が発生すると思います。
一気にプログラムを完成させるのではなく、エラーが出たら自分が解るところまでソースをコメントし、少しずつ動かすといいですよ。

評価

0

>Hizuke before_date = new Hizuke();
>before_data.year_text.getText()

たまに間違えるんですよね、dateとdata。

評価

0

ひろちゃん様、stacc様

あまりにも初歩的なミスに、回答していただき、ありがとうございました。
無事、質問箇所のコンパイルエラーを消すことができました。

他にもまだありますが、ひろちゃん様の仰ったとおり、少しずつやっていこうと思います。
本当にありがとうございました 

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。