当我在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;
}
}
答案 0 :(得分: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);
}
答案 1 :(得分: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_num
和open_balance
变量。因此,当您在该方法中引用它们时,您将引用新创建的局部变量,而不是类级变量。
我很惊讶它甚至编译,但我想这只是显示我不了解的Java。根本没有编译器警告吗?