Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/11.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 2d数组比较更新_Java_Arrays - Fatal编程技术网

java 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++) {

(更新) 我不知道该怎么做,我需要比较一个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++) {
        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循环,但仍然无法解决它。谢谢你…这很有帮助,任何时候,如果你发现答案有帮助,请单击复选标记将其标记为接受。此外,如果你需要进一步澄清我只是想问一下!谢谢你…这很有帮助。任何时候,如果你觉得答案有帮助,请点击复选标记将其标记为接受。此外,如果你需要进一步的澄清,请提问!