java是不是在某种程度上“向前”检查变量?[已关闭]

b1payxdu  于 2023-01-04  发布在  Java
关注(0)|答案(1)|浏览(118)

编辑问题以包含desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem。这将有助于其他人回答问题。
19小时前关门了。
Improve this question
一只蚂蚁想要在叶子单元之间移动,叶子是一个二维数组,leaf [width][height],蚂蚁的起始位置是随机的,但在这个问题中它不是一个重要的东西,我有一个函数,它为蚂蚁生成新的点(x,y),并检查点(x,y)是否为:#规则1-高于或等于0 #规则2-低于叶的宽度和高度
下面是我的代码:

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

public class Main {
    
    public static void main(String[] args){
        int width = 3, height = 4;
        int newX, newY;

        Random random = new Random();
        int x = random.nextInt(height);
        int y = random.nextInt(width);

        int[][] leaf;
        leaf = new int[width][height];
        //Create the leaf
        for (int i = 0; i < width; i++) {
            for (int j = 0; j < height; j++) {
                leaf[i][j] = random.nextInt(11);            // Set leaf cells values

            }
        }

        for (int dx = -1; dx <= 1; dx++) {
            for (int dy = -1; dy <= 1; dy++) {
                if (dx == 0 && dy == 0) {
                    continue;
                }
                newX = x + dx;
                newY = y + dy;

                if (newX >= 0 && newX < height && newY >= 0 && newY < width) //CONDITION 1  {
                    if (leaf[x][y] < leaf[newX][newY] //CONDITION 2
                            && leaf[newX][newY] > 0) {
                        //do something
                    }
                }
            }
        }

    }
}

问题是,当我调试代码时,我发现即使有CONDITION 1来检查2个规则(#rule 1和#rule 2),Java仍然会看到CONDITION 2,并在newX或newY之一无效时抛出ArrayIndexOutOfBoundsException。

3bygqnnd

3bygqnnd1#

比较newX和高度,但是在需要宽度的索引中使用它,对于newY则相反。
相反,newX需要根据宽度进行检查,newY需要根据高度进行检查。

相关问题