java - For 循环无故中断
问题描述
我正在制作 2048 克隆,但它拒绝合并不在交互的第一行/列上的块,经过进一步调查,我发现 for 循环没有正常工作
用于演示目的的示例代码:
import java.util.Arrays;
public class teste{
public static void main(String[] args){
int[] gameBoard = new int[] {4,2,2,0} ;
gameBoard = pushLeft(gameBoard);
System.out.println(Arrays.toString(gameBoard));
}
public static int[] pushLeft(int[] gameBoard) {
System.out.println("Pushing left...");
// This one is the troublemaker
for (int y = 1; y < 4; y++) {
System.out.println("Y = " + y);
boolean[] alreadyCombined = { false, false, false, false };
if(gameBoard[y] != 0) {
int value = gameBoard[y];
int aux = y-1;
while ( (aux >= 0) && (gameBoard[aux] == 0)) {
aux--;
}
if (aux == -1) {
gameBoard[y] = 0;
gameBoard[0] = value;
}
else if (gameBoard[aux] != value && y-aux != 1) {
gameBoard[y] = 0;
gameBoard[aux+1] = value;
}
else if(gameBoard[aux] != value) {
break;
}
else {
if(alreadyCombined[aux]) {
gameBoard[y] = 0;
gameBoard[aux+1] = value;
}
else {
gameBoard[y] = 0;
gameBoard[aux] *= 2;
alreadyCombined[aux] = true;
}
}
}
}
return gameBoard;
}
此代码返回此输出:
Pushing left...
Y = 1
[4, 2, 2, 0]
如您所见,它缺少 Y = 2 和 Y = 3,这使得 2 个内部的两个不结合。有任何想法吗?
解决方案
您的代码通过
else if(gameBoard[aux] != value) {
break;
}
所以 break 迫使你停止循环,因为value = 2
et 和gameBoard[aux] = 4
你应该尝试打印这些值以查看你的问题在哪里
推荐阅读
- javascript - 以角度 11 将数据提取到 ng-bootstrap 表
- r - 添加示例时,pkgdown 无法解析 Rd 文件
- python - 具有递归函数的 P(n) 之和
- powershell - powershell sendkeys 不能与阿拉伯字符一起正常工作
- sql-server - SQL Server 表中列的整理设置不起作用
- php - PHP-SPX - 在 Web GUI 上查看 CLI 命令生成的分析结果
- django - 如何根据用户状态呈现不同的模板
- javascript - Karma - 调度点击事件时没有调用 Jasmine 间谍
- linux - 从 cron 执行时脚本无法正确运行
- javascript - 如何在瞬间自定义“无效日期”