2014-10-31 54 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中。

相关问题