0

下面的程序(感谢日晷)计算矩形的面积

公共类 ComputeTheArea {

public static int areaOfTheRectangle (char[][] table, char ch) {
    int[] first = new int[2];
    int[] last = new int[2];

    for (int i=0; i<3; i++) { 
        for (int j=0; j<4; j++) {
               if(grid[i][j]==ch) {
                  first[0] = i;
                  first[1] = j;
               }
        }
    }

    for (int i=2; i>=0; i--) { 
        for (int j=3; j>=0; j--) { 
               if(grid[i][j]==ch) {
                  last[0] = i;
                  last[1] = j;
               }                    
        }
    }

    int answer = ((Math.max(first[0]+1,last[0]+1) - Math.min(first[0]+1,last[0]+1)) *
                  (Math.max(first[1]+1,last[1]+1) - Math.min(first[1]+1,last[1]+1)));

    return answer;
}

但是,当它运行时,它会输出错误的答案。我知道 for 循环有问题。我是 Java 新手,我需要您的帮助来修复该方法。请非常感谢!

编辑:我编辑了代码以符合迈克尔的回答。

4

2 回答 2

1

首先,您不会在第一个循环中搜索矩阵中的所有元素。
其次,当你找到匹配时,你不会休息。
此外,这种方法有点缺陷。例如,看这个矩阵:

a b c b 
a _ c d 
x z b a 

在这里,您将不知道b在第一排停在哪个位置才能获得整个b广场。

如果您只是循环遍历整个矩阵一次并保存最大和最小 (firstlast) x 和 y 坐标,则可以非常轻松地计算面积。请参阅此代码:

public static int charArea (char[][] grid, char ch) {
    int[] first = new int[] {100, 100};
    int[] last = new int[] {-1, -1};

    for (int i=0; i<3; i++) { 
        for (int j=0; j<4; j++) {
               if(grid[i][j]==ch) {
                  first[0] = Math.min(i, first[0]);
                  first[1] = Math.min(j, first[1]);
                  last[0] = Math.max(i, last[0]);
                  last[1] = Math.max(j, last[1]);
               }
        }
    }

    int answer = (last[0] - first[0] + 1) * (last[1] - first[1] + 1);

    return answer;
}
于 2012-07-15T11:38:36.010 回答
0

一旦找到字符,for 循环应该可能会中断。

第一个 for 循环设置 j=i。那可能应该是 j=0 。

我认为长度计算不正确。两个术语都应加 1。即first=0 和last=3 的长度应该是last+1-first=4,而不是现在的3。

于 2012-07-15T11:33:02.620 回答