我遇到数组索引问题。代码应该在20x20网格周围移动Ant类型的对象。
public class Test {
Organism[][] grid = new Organism[20][20];
public static void main(String[] args) {
for (int i = 0; i < 20; i++){
for (int j = 0; j < 20; j++){
if(grid[i][j] instanceof Ant){
int xpos = i;
int ypos = j;
grid[i][j].move(xpos, ypos);
grid[i][j].breed(xpos, ypos);
}
}
}
}
Class Ant扩展了Organism,class Organism扩展了Test。
public class Ant extends Organism{
public void move(int xpos, int ypos){
Random rand = new Random();
int direction = rand.nextInt(3);
if(direction == 0){
if(grid[xpos][ypos + 1] == null && xpos <20 && ypos <20)
{
grid[xpos][ypos] = grid[xpos][ypos];
grid[xpos][ypos] = null;
{
}
}
}
方法移动应该在网格上选择随机方向,如果相邻空间为空,则移动Ant。它也不能超出20x20网格。 (对于其他方向,还有三个if循环)。
如果我将move方法中的第六行更改为:
if(grid[xpos][ypos] == null && xpos <20 && ypos <20)
然后不会抛出任何错误。
我对发布这篇文章犹豫不决,因为这可能是我的一个小错误,但我已经盯着这几个小时了。
非常感谢协助。
答案 0 :(得分:0)
从左到右评估&&
的操作数,如果其中一个评估为false
,评估将停止。因此,如果一个或多个操作数具有潜在危险(例如可能超出范围的数组查找),并且某些其他操作数应该防止这种情况,那么保护操作数需要先行。此外,您需要检查您实际使用的索引,即xpos
和ypos + 1
,并且忘记在移动蚂蚁的分配中使用ypos + 1
:
if (xpos < 20 && ypos + 1 < 20 && grid[xpos][ypos + 1] == null) {
grid[xpos][ypos + 1] = grid[xpos][ypos];
grid[xpos][ypos] = null;
}
(并且,假设xpos
和ypos
是有效索引,您无需检查xpos
。)