2012-04-19 22 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 2012-04-19 01:57:50

回答

2

问题被遮蔽:当你声明具有相同的名称作为成员变量的方法中的变量,它屏蔽了该成员变量。

E.g.

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

感谢兄弟我知道了,我能解决我的问题。 – 2012-04-22 03:32:26

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_name,acc_numopen_balance变量。所以当你在该方法中引用它们时,你引用了新创建的局部变量,而不是类级变量。

我很惊讶,它甚至编译,但我想这只是显示我不知道Java。根本没有编译器警告?

+1

Java可以使用局部变量影子成员变量(也可以有成员变量影子超类成员变量)。尽管如此,大多数IDE都会警告你。 – trutheality 2012-04-19 02:08:47