令人困惑的2D数组

时间:2017-03-01 11:41:10

标签: java arrays

为什么我的解决方案无效?

这是练习2D阵列的练习,显然我没有理解它们。 输入是创建一个方法,在Array [] []中找到最大的沙漏形整数。数组的大小总是6x6,因此对于循环是x <4和y <4,整数值也是从-9到9,这就是为什么我的结果变量以-256开头(如果我开始的话) 0,充满负值的数组不起作用)

  

示例输入

1 1 1 0 0 0
0 1 0 0 0 0
1 1 1 0 0 0
0 0 2 4 4 0
0 0 0 2 0 0
0 0 1 2 4 0
  

这是产生输出的沙漏形状

2 4 4
  2
1 2 4
  

示例输出

19
  

我的错误输出

13
  

以下是方法:

public class Solution {         public static int largestHourglass(int [] [] buffer){

        int result = -256; 
        int currentSize = 0;

        for (int x=0; x<4; x++){
            for (int y=0; y<4; y++){
                currentSize = (buffer[x][y+2] + buffer[x+1][y+2] + buffer[x+2][y+2]
                                        + buffer[x+1][y+1]
                         + buffer[x][y] + buffer[x+1][y] + buffer[x+2][y]);
                if (currentSize > result) { result = currentSize;}
            }
        }

        return result;
    }
}
  

然后我的maxHourglass()方法在main中使用。

public static void main(String[] args) {
    Scanner in = new Scanner(System.in);
    int arr[][] = new int[6][6];
    for(int i=0; i < 6; i++){
        for(int j=0; j < 6; j++){
            arr[i][j] = in.nextInt();
        }
    }
    System.out.println(Solution.biggestHourglass(arr));
}
}

我的结果与预期相符,而且我不知道我做错了什么。请不要粗鲁,我还在学习。谢谢!

2 个答案:

答案 0 :(得分:1)

public class Solution {
    public static int biggestHourglass(int[][] buffer){

        int result = -256; 
        int currentSize = 0;

        for (int x=0; x<4; x++){
            for (int y=0; y<4; y++){
                currentSize = (buffer[x+2][y] + buffer[x+2][y+1] + buffer[x+2][y+2]
                                        + buffer[x+1][y+1]
                         + buffer[x][y] + buffer[x][y+1] + buffer[x][y+2]);
                if (currentSize > result) { result = currentSize;}
            }
        }

        return result;
    }
}

我没有检查过,但看起来你弄乱了x和y轴。

所以基本上你采取了:

[x][_][x]
[x][x][x]
[x][_][x]

形状而不是:

[x][x][x]
[_][x][_]
[x][x][x]

答案 1 :(得分:1)

currentSize = (buffer[x][y] + buffer[x][y+1] + buffer[x][y+2]
                                    + buffer[x+1][y+1]
                     + buffer[x+2][y] + buffer[x+2][y+1] + buffer[x+2][y+2]);
            if (currentSize > result) { result = currentSize;}

*尺寸计算应与您要添加

一样

(0,0)+(0,1)+(0,2)

  + (1,1) +

(2,0)+(2,1)+(2,2)

在你的第一次迭代中依此类推*