接下来是数组和索引越界

时间:2012-11-06 13:40:50

标签: arraylist indexing next bounds out

检查“索引越界”的最佳做法和解决方案以下解决方案有效,但感觉非常hacky。还有更好的选择吗?

public void nextPerson(int index){ //Index is the current location in the arraylist
    try{
        System.out.println(thePeople.get(index++));
    }
    catch (IndexOutOfBoundsException e){
        System.out.println("At the end");
    }
}

2 个答案:

答案 0 :(得分:0)

编辑:Java是按值传递的。这意味着如果将“index”变量传递给函数,外部变量将不会受到函数内部执行的更改的影响。

所以你必须保持索引var class-scoped,比如List ...

public void nextPerson(){ 
    if (index>=0 && index<thePeople.size())
        System.out.println(thePeople.get(index++));
    } else {
        System.out.println("At the end");
    }
}

或者传递它并将其返回

    public int nextPerson(int index){ 
        if (index>=0 && index<thePeople.size())
            System.out.println(thePeople.get(index++));
        } else {
            System.out.println("At the end");
        }
        return index;
    }

对于previouPerson也是如此,只需使用index--;

顺便说一下,如果你将索引保存在消费者类中,在这个对象之外,你可以得到整个List并在消费者类中迭代它......

答案 1 :(得分:0)

我发现通过使用局部变量来跟踪Arraylist索引。我能够有两种方法来处理移动思考ArrayList。有一个用于当前输出位置。

if(arrayPosition < thePeople.size() - 1)