我有2个for循环,我正在制作一个类似2048的游戏。如果某些东西向左滑动,则此方法返回true。但是,它会向我返回false,并且只有" banana"是印刷,这意味着另一个循环甚至不执行。可能是什么情况?
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;
}
答案 0 :(得分:0)
执行了第二个for
循环,但第二个for
循环内的条件都不匹配。然后你不会得到任何输出。
您可以确保第二个for
循环正在运行,只需添加else
并打印一些内容。
您需要重新考虑并重新考虑第二个for
循环中的条件才能纠正它们。
答案 1 :(得分:0)
您的其他for循环会在ArrayIndexOutOfBoundsException
时抛出i==array2.length-1
,因为以下条件是从左到右计算的,因此array2[i+1]
会在评估i != array2.length-1
之前得到评估。
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]
。
答案 2 :(得分:0)
似乎您正在尝试创建一个长度为array2
的整数数组array.length
。 array.length
可能只包含两行(单行的可能性被删除,因为如果只有一行,您会看到IndexOutofBoundException
),在这种情况下,您的if conditions
会永远不会被执行
您可以通过在第二个check statements for array.length
中添加else
和for loop
子句来解决这个问题。