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 回答