Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 迭代二维数组的次对角线_Java_Arrays - Fatal编程技术网

Java 迭代二维数组的次对角线

Java 迭代二维数组的次对角线,java,arrays,Java,Arrays,我试图遍历随机生成的0和1的2d数组。在这个我一直坚持的方法中,我试图看看次对角线是否有所有相同的数字、所有1、所有0或不同的数字 次对角线含义: 110 101 011 0是次对角线 这是我现在的代码。我试着从最后一行开始迭代,沿着对角线一直数到第一行 int firstValue= matrix[matrix.length-1][0]; int result = -1; for(int row = matrix.length-1; row > 0; row--)

我试图遍历随机生成的0和1的2d数组。在这个我一直坚持的方法中,我试图看看次对角线是否有所有相同的数字、所有1、所有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=0;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]);
}

for(int i=(arr.length-1);i所以我们要检查次对角线中的所有值是否都是相同的值,如果是,那么我们要打印相同的值。首先我们留出一个比较来检查其他索引

int checkValue = arr[0][arr[0].length-1];
这是第一行中的最后一个值。然后,我们设置了一个标志,以便在我们要检查的索引与第一个值匹配时捕获。我们将其设置为false,因为我们将假设这些值不匹配

boolean flag = false;
现在我们有了它,我们需要遍历数组中的每一行。我们将从第二行(arr[1])开始,然后我们需要与我们检查的上一个值(arr[1][arr.length-1-i])相比,检查下一个值和上一个值(arr[1][arr.length-1-i])如果我们检查的值相同,请将标志更改为true

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

你得到的是ArrayIndexOutOfBoundsException吗?是的,这就是为什么我认为我的for循环是错误的,可能是第一个赋值,但是我怎么能改变它,使row=数组的最后一行只是matrix.length?我改变了row+,正如我上面所示,但是我运行代码直到得到一个实例,其中子对角线都是1s或0s,但程序仍然输出数字不同。这是什么原因?我的结果条件?您仍然有一个错误-行>0,它应该是行>=0。我确实解释了编辑2下的更多内容,以便下次尽量不更改原始问题,而是添加编辑,否则会混淆其他可能阅读您的问题的人:)
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");