迭代二维数组的次对角线



我正在尝试迭代随机生成的2d 0和1数组。在我一直坚持的这个方法中,我试着看看子对角线是否都是相同的数字,都是15,都是0,还是不同的数字。

子对角线含义:

110年

101年

011年

0是次对角线。

这是我目前拥有的代码。我尝试从最后一行开始迭代,并对角线计数到第一行。

int firstValue= matrix[matrix.length-1][0];
    int result = -1;
    for(int row = matrix.length-1; row > 0; row--)
    {
        int column = row;
        if(firstValue == matrix[row][column])
        {
            result = firstValue;
            continue;
        }
        else
        {
            result = -1;
            break;
        }
    }
    if(result== 1)
    {
        System.out.println("All " + firstValue + "s on the subdiagonal");
    }
    else if (result == 0)
    {
        System.out.println("All " + firstValue + "s on the subdiagonal");
    }
    else
    {
        System.out.println("Numbers on subdiagonal are different");
    }
}

我几乎可以肯定我的问题是与firstValue和/或for循环计数对角线。如有任何帮助将不胜感激,谢谢。

您的问题似乎在下一行

for(int row = matrix.length-1; row > 0; row++) {
    ...
}

你正在做一个

row = matrix.length-1; // row = array length - 1
row++ //this will increase the row's value beyond your array length

那么你将访问一个不存在的索引,导致ArrayIndexOutOfBoundsException

编辑

你要做的是,

for(int row = matrix.length-1; row >= 0; row--) {
    ....
}

这样你就可以从最大索引到最小索引(0)遍历数组。

编辑2

假设起始数组arr有4个元素。它的结构如下,

arr[0] = "test1";
arr[1] = "test2";
arr[2] = "test3";
arr[3] = "test4";

数组的索引总是从0开始,所以上面数组的最高索引是3。

如果你想从最小索引迭代到最大索引,你需要

for(int i = 0; i < arr.length; i++) {
    //i's initial value is 0 and itll increment each time the loop runs
    //loop will terminate when i is no longer < 4
    System.out.println(arr[i]);
}

和逆序遍历数组

for(int i = (arr.length - 1); i <= 0; i--) {
    //i's initial value is (4 - 1) and it'll decrement each time the loop runs
    //loop will terminate when i smaller or equal to 0
    System.out.println(arr[i]);
}

所以我们要检查子对角线中的所有值是否都是相同的值,如果是,那么我们要打印相同的值。首先,我们留出一个比较来检查其他索引

int checkValue = arr[0][arr[0].length-1];

这是第一行的最后一个值。然后设置一个标志,以便在检查的索引与第一个值匹配时捕获。我们将其设置为false,因为我们假定两个值不匹配。

boolean flag = false;

现在有了它,我们需要遍历数组中的每一行。我们将从第二行开始(arr[1]),然后我们需要检查与我们检查的最后一个值(arr[1][arr])相比向下和向上的值。长度- 1 - i])。如果我们的第一个值(我们将它的值赋给checkValue)和我们正在检查的值相同,将标志改为true。

for (int i = 1; i < arr.length; i++)
    if (arr[i][arr.length - 1 - i] != checkValue)
        flag = true;

将遍历数组中的所有行。现在我们必须检查flag的状态并打印出相应的响应。如果标志为true,则打印出该行上的值是相同的。否则我们会说子对角线不匹配。

if (!flag)//remember our flag is set to false, double negative equals true.
    System.out.println("All of the values on the subdiagonal are the same");
else
    System.out.println("All of the values on the subdiagonal are not the same");

相关内容

  • 没有找到相关文章

最新更新