java 2d数组比较更新
(更新) 我不知道该怎么做,我需要比较一个2d数组,看看是否有匹配的数字。我需要四个数字来匹配上/下、左/右或对角线。我只是无法测试下/左对角线(/)这是我的更新代码java 2d数组比较更新,java,arrays,Java,Arrays,(更新) 我不知道该怎么做,我需要比较一个2d数组,看看是否有匹配的数字。我需要四个数字来匹配上/下、左/右或对角线。我只是无法测试下/左对角线(/)这是我的更新代码 public static boolean isAdjacentFour( int[][] a ) { // Code to test if column has four adjacent numbers for ( int row = 0; row <= a.length - 3 ; row++) {
public static boolean isAdjacentFour( int[][] a ) {
// Code to test if column has four adjacent numbers
for ( int row = 0; row <= a.length - 3 ; row++) {
for (int col = 0; col <= a[0].length - 1 ; col++) {
if (a[row][col] == a[row+1][col] && a[row+2][col] == a[row][col]
&& a[row+3][col] == a[row][col]) {
return true;
}
}
}
// Code to test if row has four adjacent numbers
for ( int row = 0; row <= a.length - 1 ; row++) {
for (int col = 0; col <= a[0].length - 3 ; col++) {
if (a[row][col] == a[row][col+1] && a[row][col] == a[row][col+2]
&& a[row][col] == a[row][col+3]) {
return true;
}
}
}
// Code to test if there are 4 adjacent numbers in a down/right ( \ )diagonal
for ( int row = 0; row <= a.length - 3 ; row++) {
for (int col = 0; col <= a[0].length - 3 ; col++) {
if (a[row][col] == a[row+1][col+1] && a[row][col] == a[row+2][col+2]
&& a[row][col] == a[row+3][col+3] ) {
return true;
}
}
}
for ( int row = 0; row <= a.length - 3 ; row++) {
for (int col = 0; col <= a[0].length + 3 ; col--) {
if (a[row][col] == a[row+1][col-1] && a[row][col] == a[row+2][col-2]
&& a[row][col] == a[row+3][col-3] ) {
return true;
}
}
}
return false;
}
public静态布尔值isAdjacentFour(int[]a){
//测试列是否有四个相邻数字的代码
对于(int row=0;row,根据经验,始终放置调试点以查看出现异常/错误的原因
这里的问题是,外部循环从0运行到第1行。但在内部循环中,您使用的是[row+2]和[row+3]以及[row+1]。现在,当外部循环转到第2行迭代时,您将得到一个越界异常
你可以在这里发布代码,但如果你理解了这一点,你应该能够解决它
(编辑):注释中询问的示例
假设您有一个大小为10X10的二维阵列a[]]。
现在,如果当前循环位于[4][4]或(A[row][col]):
左元素:A[4][3]或(A[row][col-1])//这里我们在同一行,但(column-1)是我们想要的左元素。
右上角元素:A[3][5]或((A[row-1][col+1])//这里我们将转到(4-1)行,因为我们对上面的行感兴趣,而(4+1)列是我们想要的右上角元素。
左下角:A[5][3](A[row+1][col-1])
现在,两个连续的左下角元素将是(A[row+1][col-1])和(A[row+2][col-2])
尝试通过绘制一个2D数组并用[i][j]命名每个单元格来可视化它。根据经验法则,始终放置调试点以查看出现异常/错误的原因
这里的问题是,外部循环从0运行到第1行。但在内部循环中,您使用的是[row+2]和[row+3]以及[row+1]。现在,当外部循环转到第2行迭代时,您将得到一个越界异常
你可以在这里发布代码,但如果你理解了这一点,你应该能够解决它
(编辑):注释中询问的示例
假设您有一个大小为10X10的二维阵列a[]]。
现在,如果当前循环位于[4][4]或(A[row][col]):
左元素:A[4][3]或(A[row][col-1])//这里我们在同一行,但(column-1)是我们想要的左元素。
右上角元素:A[3][5]或((A[row-1][col+1])//这里我们将转到(4-1)行,因为我们对上面的行感兴趣,而(4+1)列是我们想要的右上角元素。
左下角:A[5][3](A[row+1][col-1])
现在,两个连续的左下角元素将是(A[row+1][col-1])和(A[row+2][col-2])
试着通过绘制一个2D数组并用[i][j]来命名每个单元格来可视化它。我在第一个嵌套for循环中注意到的一个问题是这行代码
for ( int row = 0; row <= a.length - 3 ; row++)
内部for循环的第二次迭代:
if (a[0][0] == a[1][0] && a[2][0] == a[0][0] && a[3][0] == a[0][0])
if (a[0][1] == a[1][1] && a[2][1] == a[0][1] && a[3][1] == a[0][1])
if (a[0][2] == a[1][2] && a[2][2] == a[0][2] && a[3][2] == a[0][2])
if (a[0][0] == a[1][3] && a[2][3] == a[0][3] && a[3][0] == a[0][3])
if (a[1][0] == a[2][0] && a[3][0] == a[1][0] && a[4][0] == a[1][0])
内部for循环的第三次迭代:
if (a[0][0] == a[1][0] && a[2][0] == a[0][0] && a[3][0] == a[0][0])
if (a[0][1] == a[1][1] && a[2][1] == a[0][1] && a[3][1] == a[0][1])
if (a[0][2] == a[1][2] && a[2][2] == a[0][2] && a[3][2] == a[0][2])
if (a[0][0] == a[1][3] && a[2][3] == a[0][3] && a[3][0] == a[0][3])
if (a[1][0] == a[2][0] && a[3][0] == a[1][0] && a[4][0] == a[1][0])
内部for循环的最后一次迭代:
if (a[0][0] == a[1][0] && a[2][0] == a[0][0] && a[3][0] == a[0][0])
if (a[0][1] == a[1][1] && a[2][1] == a[0][1] && a[3][1] == a[0][1])
if (a[0][2] == a[1][2] && a[2][2] == a[0][2] && a[3][2] == a[0][2])
if (a[0][0] == a[1][3] && a[2][3] == a[0][3] && a[3][0] == a[0][3])
if (a[1][0] == a[2][0] && a[3][0] == a[1][0] && a[4][0] == a[1][0])
一旦完成此操作,row变量将根据外部循环定义递增。这是最有可能导致错误的原因,因为现在当我们开始以row=1迭代内部循环时,会发生这种情况
迭代一个内部for循环:
if (a[0][0] == a[1][0] && a[2][0] == a[0][0] && a[3][0] == a[0][0])
if (a[0][1] == a[1][1] && a[2][1] == a[0][1] && a[3][1] == a[0][1])
if (a[0][2] == a[1][2] && a[2][2] == a[0][2] && a[3][2] == a[0][2])
if (a[0][0] == a[1][3] && a[2][3] == a[0][3] && a[3][0] == a[0][3])
if (a[1][0] == a[2][0] && a[3][0] == a[1][0] && a[4][0] == a[1][0])
在这里,当尝试访问4x4 2D数组中的第5行时,我们已经有了indexoutofboundsexception
for (int col = 0; col <= a[0].length - 3 ; col++)
for(int row=0;row我在第一个嵌套for循环中注意到的一个问题是这行代码
for ( int row = 0; row <= a.length - 3 ; row++)
内部for循环的第二次迭代:
if (a[0][0] == a[1][0] && a[2][0] == a[0][0] && a[3][0] == a[0][0])
if (a[0][1] == a[1][1] && a[2][1] == a[0][1] && a[3][1] == a[0][1])
if (a[0][2] == a[1][2] && a[2][2] == a[0][2] && a[3][2] == a[0][2])
if (a[0][0] == a[1][3] && a[2][3] == a[0][3] && a[3][0] == a[0][3])
if (a[1][0] == a[2][0] && a[3][0] == a[1][0] && a[4][0] == a[1][0])
内部for循环的第三次迭代:
if (a[0][0] == a[1][0] && a[2][0] == a[0][0] && a[3][0] == a[0][0])
if (a[0][1] == a[1][1] && a[2][1] == a[0][1] && a[3][1] == a[0][1])
if (a[0][2] == a[1][2] && a[2][2] == a[0][2] && a[3][2] == a[0][2])
if (a[0][0] == a[1][3] && a[2][3] == a[0][3] && a[3][0] == a[0][3])
if (a[1][0] == a[2][0] && a[3][0] == a[1][0] && a[4][0] == a[1][0])
内部for循环的最后一次迭代:
if (a[0][0] == a[1][0] && a[2][0] == a[0][0] && a[3][0] == a[0][0])
if (a[0][1] == a[1][1] && a[2][1] == a[0][1] && a[3][1] == a[0][1])
if (a[0][2] == a[1][2] && a[2][2] == a[0][2] && a[3][2] == a[0][2])
if (a[0][0] == a[1][3] && a[2][3] == a[0][3] && a[3][0] == a[0][3])
if (a[1][0] == a[2][0] && a[3][0] == a[1][0] && a[4][0] == a[1][0])
一旦完成此操作,row变量将根据外部循环定义递增。这是最有可能导致错误的原因,因为现在当我们开始以row=1迭代内部循环时,会发生这种情况
迭代一个内部for循环:
if (a[0][0] == a[1][0] && a[2][0] == a[0][0] && a[3][0] == a[0][0])
if (a[0][1] == a[1][1] && a[2][1] == a[0][1] && a[3][1] == a[0][1])
if (a[0][2] == a[1][2] && a[2][2] == a[0][2] && a[3][2] == a[0][2])
if (a[0][0] == a[1][3] && a[2][3] == a[0][3] && a[3][0] == a[0][3])
if (a[1][0] == a[2][0] && a[3][0] == a[1][0] && a[4][0] == a[1][0])
在这里,当尝试访问4x4 2D数组中的第5行时,我们已经有了indexoutofboundsexception
for (int col = 0; col <= a[0].length - 3 ; col++)
对于(int row=0;row[row+2]
和[row+3]
是导致错误的原因,请将循环条件设置为row
以上注释是正确的,除了在我的回答中我做了row[row+2]
和[row+3]
是错误的原因,将循环条件设置为行
上面的注释是正确的,除了在我的回答中我做了第11行,k1133这帮助很大…现在我只有一个比较对角线的问题,我没有问题向下和向右(\),我只是无法让它向下和向左(/)如果我理解正确的话,给定一个元素,您希望获取其所有相邻元素(左、右、上、下、左上、右上……)的值?这不是我在更新的代码中所做的吗,我仍然得到一个超出范围的索引…我尝试过用一系列不同的方法处理for循环,但仍然无法将其计算出来@11thdimension行,k1133这非常有帮助…现在我只有一个比较对角线的问题,我没有问题向下移动到右边(\),如果我理解正确,我就无法让它向下和向左(/),因为给定一个元素,您要获取其所有相邻元素的值(左、右、上、下、左上、右上……)?这不是我在更新的代码中所做的吗,我仍然得到一个超出范围的索引…我尝试过用一系列不同的方法来处理for循环,但仍然无法解决它。谢谢你…这很有帮助,任何时候,如果你发现答案有帮助,请单击复选标记将其标记为接受。此外,如果你需要进一步澄清我只是想问一下!谢谢你…这很有帮助。任何时候,如果你觉得答案有帮助,请点击复选标记将其标记为接受。此外,如果你需要进一步的澄清,请提问!