2014-10-31 3 views
0

나는 2 개의 루프를 가지고 있고, 2048과 같은 게임을하고있다. 이 메소드는, 무언가가 왼쪽으로 밀린 경우에 true를 돌려줍니다. 그러나, 그것은 나에게 거짓을 반환하고 "바나나"만 인쇄하고 있습니다. 즉, 다른 for 루프는 심지어 실행되지 않습니다. 어떤 경우일까요?두 번째 for 루프가 실행되고 있지 않습니까?

public boolean slideLeft(int[][] array, int row) { 
    int[] array2 = new int[array.length]; 
    boolean result = false; 
    for(int j = 0; j < array.length; j++) { 
     array2[j] = array[j][row]; 
     System.out.println("banana"); 
    } 
    for (int i = 0; i <array2.length; i ++) { 
     if (array2[i] == 0 && array2[i+1] != 0 && i != array2.length-1) { 
     System.out.println("apple"); 
     array2[i] = array2 [i+1]; 
     result = true; 
     } 
     if(array2[i] != 0 && i != 0 && array2[i-1] == array2[i]) { 
     System.out.println("pear"); 
     array2[i-1] = 2*(array2[i-1]); 
     array2[i]=0; 
     result = true; 
     } 
    } 
    return result; 
    } 
+2

또는 다른 루프가 실행되고 있지만 조건이 일치하지 않습니다. 귀하의 조건이 정확히 무엇을 테스트해야합니까? –

+0

디버거를 실행하고 단계별 실행으로 이동하십시오. 모든 변수를 검사하고 현재 진행중인 작업을 확인할 수 있습니다. –

+0

아니면,'if' 둘 다에'else'를 만들고 거기에'System.out.println ("사과가 아닙니다);'와 같이 인쇄하십시오. –

답변

0

는 제 for 루프 실행하지만 제 for 루프 내부 상태 중 어느 것도 일치하지 않습니다. 그럼 너는 아무 것도 나가지 않을거야.

for 루프가 실행 중임을 확인할 수 있습니다. else을 넣고 무엇인가를 인쇄하십시오.

두 번째 for 루프 내부의 상태를 다시 생각하고 다시 생각해보아야합니다.

0

루프에 대한 귀하의 다른 하나는 다음과 같은 조건이 왼쪽에서 오른쪽으로 평가되기 때문에 i==array2.length-1는, 그래서 array2[i+1]i != array2.length-1 전에 aveluated 될 때 ArrayIndexOutOfBoundsException을 평가를 던질 것입니다.

if (array2[i] == 0 && array2[i+1] != 0 && i != array2.length-1) { 
    System.out.println("apple"); 
    array2[i] = array2 [i+1]; 
    result = true; 
    } 

당신은 그것을 변경해야합니다

if (i != array2.length-1 & array2[i] == 0 && array2[i+1] != 0) { 
    System.out.println("apple"); 
    array2[i] = array2 [i+1]; 
    result = true; 
    } 

당신의 당신이 array2[i-1] == array2[i] 것을 확인하기 전에 i != 0 있는지 확인하기 때문에 조건이 유사한 예외를 피할 경우 두 번째.

0

길이가 array.length 인 배열 array2을 만드는 것 같습니다. array.length에는 두 행만 포함될 가능성이 있습니다 (한 행만 있으면 IndexOutofBoundException을 보았을 것입니다). if conditions은 실행되지 않습니다.

작업 할 수있는 방법은 check statements for array.lengthelse 절을 두 번째 for loop에 두는 것입니다.

관련 문제