2012-07-15 99 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。