我正在尝试迭代随机生成的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");
}
}
我几乎可以肯定我的问题是第一个值和/或for循环计算对角线。 任何帮助将不胜感激,非常感谢
答案 0 :(得分:1)
您的问题似乎在以下一行,
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的Staring数组有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]);
}
答案 1 :(得分:0)
因此我们要检查子对角线中的所有值是否都是相同的值,如果是,那么我们要打印相同的值。首先,我们预留一个比较来检查其他指数
int checkValue = arr[0][arr[0].length-1];
这是第一行中的最后一个值。然后我们设置一个标志,以便在我们检查的索引与第一个值匹配时捕获。我们将其设置为false,因为我们假设值不匹配。
boolean flag = false;
现在我们已经有了,我们需要遍历数组中的每一行。我们将从第二行(arr [1])开始,然后我们需要检查一个值和一个值,与我们检查的最后一个值(arr [1] [arr.length - 1 - i])相比。如果我们的第一个值(我们将它的值赋给checkValue)和我们检查的值相同,则将标志更改为true。
for (int i = 1; i < arr.length; i++)
if (arr[i][arr.length - 1 - i] != checkValue)
flag = true;
这将贯穿数组中的所有行。现在我们必须检查标志的状态并打印出适当的响应。如果该标志为true,则打印出该行上的值相同。否则我们会说subiagonal一直不匹配。
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");