2014-10-31 24 views
0

我有2 for循環,我正在做一個2048喜歡的遊戲。如果有東西滑向左側,此方法返回true。但是,它會返回false,只有「banana」正在打印,這意味着其他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

或者您的其他循環正在運行,但您的條件都不符合。你的條件應該測試什麼? – 2014-10-31 04:17:01

+0

啓動您的調試器並逐步執行。你可以檢查每個變量並找出發生了什麼。 – 2014-10-31 04:19:01

+0

或者,在你的兩個'if'中創建'else',並在那裏打印一些內容,比如'System.out.println(「不是蘋果」);'。 – 2014-10-31 04:20:40

回答

0

for循環執行但沒有條件的第二for循環內不匹配。那麼你不會得到任何出。

您可以確保第二個for循環正在運行,只需放入一個else並打印一些內容。

您需要重新考慮並重新考慮第二個for循環內的條件以糾正它們。

0

您的循環等會拋出ArrayIndexOutOfBoundsExceptioni==array2.length-1,因爲以下條件從左至右評估,因此array2[i+1]i != array2.length-1之前aveluated進行評估。

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

你的第二個if條件避免類似的例外,因爲你檢查i != 0檢查array2[i-1] == array2[i]之前。

0

它似乎是你正在嘗試創建一個數組,array2,長度爲array.length整數。有可能array.length可能只包含兩行(排除單行的可能性,因爲如果只有一行,您會看到IndexOutofBoundException),在這種情況下,您的if conditions將永遠不會執行。

您可以通過一種方法將check statements for array.lengthelse子句放在第二個for loop中。

相關問題