我有一个对象数组,我试图将新对象添加到数组中第一个可用的“null”位置。但是,每当我尝试将对象添加到数组时,我都会遇到运行时错误。错误是:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -211
at Pokedex.addPokemon(Pokedex.java:37)
at Project4.main(Project4.java:36)
Pokedex类中可疑的代码是:
public void addPokemon(Pokemon pkm){
int blankSpace = 0;
for (int i = 0; i < billsPC.length; i++){
if(billsPC[i] == pkm)
System.out.println("Your Pokedex is already storing that Pokemon!");
else{
for(int j = 0; j < billsPC.length; j++){
if(billsPC[j] == null)
blankSpace++;
}
if(blankSpace == 0)
System.out.println("Your Pokedex is already holding the max amount!");
}
}
int dexLoc;
if (blankSpace == billsPC.length)
dexLoc = 0;
else
dexLoc = billsPC.length - blankSpace - 1;
//Line 37 is below
billsPC[dexLoc] = pkm;
}
Project4类(第36行)中可疑的代码是:
kantoDex.addPokemon(pkm);
其中pkm是一个设置的Pokemon对象,而kantoDex是一个设置的Pokedex对象。
答案 0 :(得分:2)
主要问题是嵌套循环。它们会导致blankSpace
增加太多次。因此billsPC.length - blankSpace - 1
变为比0
小得多的数字。
您的问题的答案是肯定的,变量可以用作Java中的数组索引。
我怀疑这种方法可能会执行您想要的操作:
public boolean addPokemon(Pokemon pkm) {
for (int i = 0; i < billsPC.length; i++) {
if (billsPC[i] == pkm) {
System.out.println("Your Pokedex is already storing that Pokemon!");
return false;
}
if (billsPC[i] == null) {
for (int j = i + 1; j < billsPC.length; j++) {
if (billsPC[j] == pkm) {
System.out.println("Your Pokedex is already storing that Pokemon!");
return false;
}
}
billsPC[i] = pkm;
return true;
}
}
System.out.println("Your Pokedex is already holding the max amount!");
return false;
}
如果此元素存在,该方法会将pkm
添加到null
的第一个billsPC
元素。如果billsPC
已包含pkm
或不包含null
元素,则会打印一条消息。最后,当且仅当true
成功添加到pkm
,否则billsPC
将返回false
。
答案 1 :(得分:0)
变量可以用作Java中的数组索引吗?是的但它应该在数组的范围内。 billsPC[-1] = pkm;//wrong
答案 2 :(得分:0)
是的,确实你之前使用过它(billsPC[i]
)。
您的代码中的问题(例外情况表明)是您尝试访问超出范围的数组位置,在本例中为索引-211
。