我用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?
答案 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
的索引