2012-04-19 6 views
0

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

ここ

私のコードがある...

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; 
    } 
} 
+2

この問題を_you_デバッグするとどうなりますか?どの時点で、コードは期待通りの動作をしませんか?予想される実行から逸脱したコード行は何ですか?それが起こると、関連オブジェクトの状態はどうなりますか?あなたは私たちにもっと多くの情報を提供する必要があります。「これはうまくいかない、私のために解決してください。 – David

答えて

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); 
} 
+0

おかげで私はそれを得て、私は私の問題を解決することができました。 –

0

私はジャワの専門家だ、これは単なる推測かもしれないが、このコードはここで間違って見えます:entry()方法で

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); 

} 

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

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

+1

Javaは、ローカル変数のシャドウメンバ変数を持つことで問題ありません(また、メンバ変数にシャドウスーパークラスメンバ変数を含めることもできます)。ほとんどのIDEはそうするときに警告します。 – trutheality

関連する問題