用变量实例化对象数组

时间:2018-10-18 17:28:46

标签: java arrays

我用Java写了一些类,但是当我运行该程序时,我收到错误“ ArrayIndexOutOfBoundsException”,这是一个有罪的类:

public class Bank {

    private String name;
    private int maxbankaccount;
    private int activebankaccount;
    private String radice = "IT8634";
    private Conto[] bankaccount = new Conto[maxbankaccount];

    public void addconto(String cf) {
        bankaccount[activebankaccount] = new Conto(radice + activebankaccount , cf);
        activebankaccount++;
    }

    public Bank(String name, int maxbankaccount) {
        this.name = name;
        this.maxbankaccount = maxbankaccount;
    }
}   

我编写了一个测试器类进行测试:

public class TestBank {

    public static void main (String[] args) {

        Bank b1 = new Bank("Fidelity", 10);

        b1.addconto("PROVA");
    }
}

由于使用调试的数组似乎没有发生逻辑错误,因此我意识到在创建对象数组时,maxbankaccount变量不是10(在Test中传递的值),而是默认值(0),然后我尝试直接传递10,效果很好。为什么不传递maxbankaccount的值10而是0?

3 个答案:

答案 0 :(得分:4)

private Conto[] bankaccount = new Conto[maxbankaccount];

此初始化发生在 其余构造函数运行之前。

将其移至构造函数中:

public Bank(String name, int maxbankaccount) {
    this.name = name;
    this.maxbankaccount = maxbankaccount;
    this.bankaccount = new Conto[maxbankaccount];
}

答案 1 :(得分:1)

您确实犯了一个逻辑错误。在实例化类时,bankaccount数组将初始化,并且始终为0。

将其移入构造函数并对其进行初始化。

public Bank(String name, int maxbankaccount) {
    /* ... */
    this.bankaccount = new Conto[maxbankaccount];
}

答案 2 :(得分:0)

比其他答案中的问题还要多,

private int activebankaccount;

不初始化变量activebankaccount 所以在:

public void addconto(String cf) {
    bankaccount[activebankaccount] = new Conto(radice + activebankaccount , cf);
    activebankaccount++;
}

您正在使用未初始化的vale作为数组bankaccount的索引