2012-07-15 107 views
0

下面的程序(感谢日晷)计算出一个矩形2-d阵列(行和列)

公共类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新手,我需要您的帮助才能修复此方法。请非常感谢你!

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

+0

这给出了什么错误的答案? – 2012-07-15 11:21:04

+0

你好@BhavikAmbani!当用户输入'a'时,它将返回6.如果'b,c,d',它将返回0. – 2012-07-15 11:24:41

回答

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; 
} 
+0

再次感谢你,Keppil!我非常感谢你的帮助!谢谢!!只是一个问题,如何在Java中说“如果一个变量不存在于一个数组中,返回0作为答案”? – 2012-07-15 11:51:13

+0

您可以使用'Arrays.asList(array).contains(char)'。在这种情况下,虽然我只是使用'boolean found',当找到匹配时我将在for循环中设置为true,如果发现== false,则在末尾返回0。 – Keppil 2012-07-15 11:53:56

+0

谢谢!按照所述完成。但它表示'找到不能解析为变量',但我确实在for循环中声明了'boolean found = true'。 – 2012-07-15 12:07:48

0

for循环找到该字符后可能会中断。

第一个for循环集合j = i。这可能应该是j = 0。

我不认为长度计算是正确的。这两个词应该加1。即第一个= 0和最后一个= 3的东西的长度应当是+ 1-first = 4,而不是现在的3。