“condition is always'true'”和“array index is outbounds”警告

disbfnqx  于 2021-07-11  发布在  Java
关注(0)|答案(1)|浏览(1099)

我正在尝试使用android studio开发我的第一个android应用程序,并且在一个内部类构造函数中得到了几个我似乎无法摆脱的警告:
在for循环中,它警告终止条件始终为true。然而,这种衰退只表现在内心 col 用于循环而不是外部 row for循环。
在任务中 grid[row][col] ,它警告数组索引 [row] 超出范围,但不是索引 [col] 是。
我不明白为什么会出现警告,因为代码似乎按预期运行,但为什么警告只出现在一个for循环和一个索引中,而任何问题肯定也会应用到另一个?非常感谢您的帮助!

private class MyInnerClass {
    private final Character UNKNOWN = '.';

    // State data
    private String id;
    private Integer grid_size;
    private final Character[][] grid;

    // Constructor
    public MyInnerClass(String id, Integer grid_size) {
        // Check the grid size is in the permitted range
        String[] permitted_grid_sizes = getResources()
                .getStringArray(R.array.permitted_grid_sizes);
        int min_permitted_grid_size = Integer
                .parseInt(permitted_grid_sizes[0]);
        int max_permitted_grid_size = Integer
                .parseInt(permitted_grid_sizes[permitted_grid_sizes.length - 1]);
        if ((grid_size < min_permitted_grid_size) || (grid_size > max_permitted_grid_size)) {
            throw new IllegalArgumentException(
                    "specified grid size (" + grid_size + ") out of range");
        }

        // Initialise metadata
        this.id = id;
        this.grid_size = grid_size;

        // Initialise a blank grid
        this.grid = new Character[this.grid_size][this.grid_size];
        for (int row = 0; row < this.grid_size; row++) {
            for (int col = 0; col < this.grid_size; col++) {        // Gives warning "Condition 'col < this.grid_size' is always 'true'"
                this.grid[row][col] = UNKNOWN;                      // Gives warning "Array index is out of bounds" on [row]
            }
        }
    }

    ...
}
lymgl2op

lymgl2op1#

我相信这个问题与变量类型有关。田野 grid_size 是integer类,您正在将其与 row 以及 col 属于“int”基元类型。 grid_size == row 将引用与值进行比较。
可能发生的情况是ide检测到了这个问题,但却给出了不准确的警告。
如果你改变了 grid_size 到基元类型 int ,警告应该消失。

相关问题