变量可以用作Java中的数组索引吗?

时间:2015-11-05 21:32:34

标签: java arrays indexing

我有一个对象数组,我试图将新对象添加到数组中第一个可用的“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对象。

3 个答案:

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