0

このプログラムを Eclipse で実行すると、実行時に入力した値ではなく、変数のデフォルト値が取得されます。プログラムを実行すると、実行時に入力する値ではなく、コンストラクターで割り当てられた変数のデフォルト値が取得されpublic account()ます。誰かがこれが起こっている理由を説明してください。

これが私のコードです...

public class bank {
    public static void main(String[] args){
        account[] obj=new account[3]; 

        for(int i=0;i<3;i++){
            obj[i]=new account();
            obj[i].entry();
            obj[i].display();
        }

        for(int i=0;i<3;i++){
            obj[i]=new account();
            String res=obj[i].getCustomer_name();
            JOptionPane.showMessageDialog(null, res);
        }

        account obj=new account();
        obj.entry();
        obj.display();
    }

}

class account {
    private String customer_name;
    private int acc_num;
    private double open_balance;

    public account() {
        customer_name="ADAM";
        acc_num=001;
        open_balance=100;
    }

    public void entry() {
        String customer_name=JOptionPane.showInputDialog(null, "Enter the customer name");
        String acc_num=JOptionPane.showInputDialog(null, "Enterthe account number");
        String open_balance=JOptionPane.showInputDialog(null, "Enter the balance");

        int acc_num1=Integer.parseInt(acc_num);
        double open_balance1=Double.parseDouble(open_balance);
    }

    public void display() {
        JOptionPane.showMessageDialog(null,customer_name);
    }

    public String getCustomer_name() {
        return customer_name;
    }
}
4

2 に答える 2

2

問題はシャドウイングです。メンバー変数と同じ名前の変数をメソッド内で宣言すると、メンバー変数がシャドウイングされます。

例えば

class MyClass{
    int var = 12;

    void shadows(){
        int var = 5;
        System.out.println(var); // prints 5
        System.out.println(this.var); // prints 12
    }

    void noshadows(){
        System.out.println(var); // prints 12
    }
}

あなたの修正:

public void entry()
{
    customer_name=JOptionPane.showInputDialog(null, "Enter the customer name");
    String acc_num_str=JOptionPane.showInputDialog(null, "Enterthe account number");

    String open_balance_str=JOptionPane.showInputDialog(null, "Enter the balance");

    acc_num=Integer.parseInt(acc_num_str);

    open_balance=Double.parseDouble(open_balance_str);
}
于 2012-04-19T01:58:30.547 に答える
0

私は Java の専門家ではないので、これは単なる推測かもしれませんが、次のコードは正しくないようです。

public account()
{
    customer_name="ADAM";
    acc_num=001;
    open_balance=100;
}

public void entry()
{
    String customer_name=JOptionPane.showInputDialog(null, "Enter the customer name");
    String acc_num=JOptionPane.showInputDialog(null, "Enterthe account number");

    String open_balance=JOptionPane.showInputDialog(null, "Enter the balance");

    int acc_num1=Integer.parseInt(acc_num);

    double open_balance1=Double.parseDouble(open_balance);

}

メソッドで、、、および変数entry()を再宣言しています。したがって、そのメソッド内でそれらを参照すると、クラスレベルの変数ではなく、新しく作成されたローカル変数が参照されます。customer_nameacc_numopen_balance

コンパイルされていることにも驚いていますが、それは Java について私が知らないことを示しているだけだと思います。コンパイラの警告はまったくありませんでしたか?

于 2012-04-19T02:00:36.537 に答える