setCells方法将四个单元格设置为某个值,而不是仅设置一个单元格

时间:2018-02-21 03:06:29

标签: java

所以我正在制作一个Grid类。这是我的setCells方法:

public boolean setCells(int rows[], int cols[], int vals[]) {
    if (rows.length == cols.length && cols.length == vals.length && vals.length == rows.length) {
        for (int i = 0; i < rows.length; i++) {
            for (int j = 0; j < cols.length; j++) {
                for (int k = 0; k < vals.length; k++) {
                    setValue(rows[i], cols[j], vals[k]);

                }
            }
        }
        return true;
    }
    return false;
}

这是我的客户代码:

public static void main(String[] args)
{
    int rows[] = {1,2};
    int columns[] = {1,2};
    int values[] = {1,2};

    Grid grid1 = new Grid(5, 7);
    Grid grid2 = new Grid(8);

    grid1.displayGrid();
    grid2.displayGrid();

    System.out.println(grid1.isEmpty());

    grid1.setCells(rows, columns, values);

    grid1.displayGrid();

现在每当我使用带有一个元素的数组时,该方法都可以正常工作。但是,当数组有多个元素时,它会将四个单元格设置为该值而不是一个。像这样:

   0  0  0  0  0  0  0
   0  2  2  0  0  0  0
   0  2  2  0  0  0  0
   0  0  0  0  0  0  0
   0  0  0  0  0  0  0

它应该是这样的:

   0  0  0  0  0  0  0
   0  1  0  0  0  0  0
   0  0  2  0  0  0  0
   0  0  0  0  0  0  0
   0  0  0  0  0  0  0

有人可以帮我吗?

1 个答案:

答案 0 :(得分:0)

您当前的算法有三个嵌套循环,这意味着它会尝试将每个可能的行和列组合设置为每个列出的值,而不是简单地根据需要设置每个单元格一次。您只需要一个循环就可以将变量跟踪索引迭代到所有三个数组中:

if (rows.length == cols.length && cols.length == vals.length) {
    for (int i = 0; i < rows.length; i++) {
        setValue(rows[i], cols[i], vals[i]);
    }
}

此外,如果您已经知道行和列具有相同的长度,并且cols和val具有相同的长度,则不需要第三次检查(行和val具有相同的长度)。我已经在之前的示例代码段中删除了它。