2012-07-15 3 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에 익숙하지 않아이 방법을 수정하는 데 도움이 필요합니다. 제발 고마워요!

편집 : 나는 Michael의 답변에 맞게 코드를 편집했습니다.

+0

무엇이 잘못된 대답입니까? –

+0

안녕하세요 @BhavikAmbani! 사용자가'a'를 입력하면'b, c, d'이면 6을 반환하고 0을 반환합니다. –

답변

1

우선, 첫 번째 루프로 매트릭스의 모든 요소를 ​​검색하지 마십시오.
두 번째로, 일치 항목을 발견했을 때 휴식하지 않습니다.
또한이 접근법에는 약간의 결함이 있습니다. 당신은 전체 b 광장을 얻기 위해 첫 번째 행에서에서 중지 할 b 모르겠다 여기

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

: 예를 들어,이 매트릭스를 참조하십시오.

대신 전체 행렬을 한 번 반복하고 최대 및 최소 (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! 도와 주셔서 정말 고맙습니다. 고맙습니다!! 그냥 질문, 어떻게하면 "배열에 변수가 존재하지 않는 경우 0 대답으로 반환"Java에서 말할 수 있습니까? –

+0

'Arrays.asList (array) .contains (char)'를 사용할 수 있습니다. 이 경우에는 'boolean found'를 사용하지만 for 루프에서 true로 설정하면 일치가 발견되고'found == false'이면 끝에 0이 반환됩니다. – Keppil

+0

감사! 말한대로. 그러나 그것은'found가 변수로 해석 될 수 없다 '라고 말하지만 for 루프에서'boolean found = true'를 선언했습니다. –

0

for 루프는 문자를 찾으면 깨져야합니다.

첫 번째 for 루프 세트 j = i. 아마도 j = 0이되어야합니다.

길이 계산이 정확하지 않다고 생각합니다. 두 조건에 모두 1을 더해야합니다. 나는. 처음 = 0이고 마지막 = 3 인 무언가의 길이는 3이 아닌 마지막 + 1-first = 4가되어야합니다.