Java 索引超出边界异常,但大小和索引相同

Java 索引超出边界异常,但大小和索引相同,java,arraylist,indexoutofboundsexception,Java,Arraylist,Indexoutofboundsexception,这段代码是关于一辆水车在一个环境中漫游,寻找有任务的供水站 试图通过要访问的点的ArrayList递增,但每次运行代码时,我都会得到一个“IndexOutOfBoundsException”,但索引不同,大小始终与索引相同,因此我非常困惑。中断程序的索引/大小似乎随机更改 示例错误: 线程“main”java.lang.IndexOutOfBoundsException中的异常:索引:5,大小:5 相关代码(假设它无限运行): int stationIncrementer=0; ArrayLis

这段代码是关于一辆水车在一个环境中漫游,寻找有任务的供水站

试图通过要访问的点的ArrayList递增,但每次运行代码时,我都会得到一个“IndexOutOfBoundsException”,但索引不同,大小始终与索引相同,因此我非常困惑。中断程序的索引/大小似乎随机更改

示例错误: 线程“main”java.lang.IndexOutOfBoundsException中的异常:索引:5,大小:5

相关代码(假设它无限运行):

int stationIncrementer=0;
ArrayList stationList=新建ArrayList();
ArrayList wellList=新建ArrayList();
迭代器it=stationList.Iterator();
公共行动传感器DACT(单元格[][]视图,长时间步长){
//循环扫描视图中的每个单元格以查找站点
int i=0,j=0;
对于(i=0;i<25;i++){
对于(j=0;j<25;j++){
单元c=视图[i][j];
if(查看[i][j]站点实例){
任务t=((站)c).getTask();
p点=视图[i][j].getPoint();
if(stationList.contains(p)){
打破
}else如果(t!=null){
统计列表。添加(p);
}
}
如果(j==25){
j=0;
}
}
}
如果(it.hasNext()&&stationList.get(stationIncrementer)!=null&&getWaterLevel()>0
&&!(getCurrentCell(查看)站点实例)){
点p=stationList.get(stationIncrementer);
stationIncrementer++;
将新动作返回到动作(p);
}

如果(j==25)的条件永远不会执行,因为定义的循环条件是j。索引是基于0的,例如,大小5只有有效的索引0..4那么您能看到索引随机越界的原因吗?正如我所说的,错误发生在几个不同的值上否,因为您没有显示视图[]的初始化代码[]view只是一个2D数组的单元格的实例化,那么这段代码不应该捕获OutOfBoundsException吗?:if(it.hasNext()&&stationList.get(stationIncrementer)!=nullThank忘了把它去掉,虽然你认为代码是不可访问的,但这与问题和问题无关。你应该将这些信息发布为评论,而不是答案,这是针对问题的实际答案。明白了。谢谢
int stationIncrementer = 0;
ArrayList<Point> stationList = new ArrayList<Point>();
ArrayList<Point> wellList = new ArrayList<Point>();
Iterator it = stationList.iterator();

public Action senseAndAct(Cell[][] view, long timestep) {

    // Loop to scan every cell in view for stations
    int i = 0, j = 0;
    for (i = 0; i < 25; i++) {
        for (j = 0; j < 25; j++) {
            Cell c = view[i][j];
            if (view[i][j] instanceof Station) {
                Task t = ((Station) c).getTask();
                Point p = view[i][j].getPoint();
                if (stationList.contains(p)) {
                    break;
                } else if (t != null) {
                    stationList.add(p);
                }
            }
            if (j == 25) {
                j = 0;
            }
    }
}

if (it.hasNext() && stationList.get(stationIncrementer) != null && getWaterLevel() > 0
            && !(getCurrentCell(view) instanceof Station)) {
        Point p = stationList.get(stationIncrementer);
        stationIncrementer++;
        return new MoveTowardsAction(p);

    }