为了好玩,我正在制作一个 2048 风格的组合显示程序。每个外循环,它都会将 2 添加到整数数组列表的 0 索引。在一个内部的for循环中,它检查索引的值是否与它上面的索引的值相同;如果是,则将 indexi+1 的值加倍并删除索引 i。
前几个循环的输出工作正常。但是,一旦我们到达第一个 128,它仍然有效,但是下一次我们得到 128 时,它不会将它们组合成 256,它只是将两个 128 留在数组的末尾。
我认为问题与不再将 128 识别为等于 128 的代码有关,因为当它应该进入该 if 语句时,它会跳过该 if 语句,但我不确定。
它目前无限循环;添加用户交互和退出语句将稍后提供。
代码
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
ArrayList<Integer> intArray = new ArrayList();
Boolean quit = false;
while (quit == false) {
intArray.add(0, 2);
for (int i=0; i<intArray.size();i++) {
try {
if (intArray.get(i) == intArray.get(i+1)) {
intArray.set(i+1, (intArray.get(i)*2));
intArray.remove(i);
}
}
catch (IndexOutOfBoundsException e) {
}
}
for (int a : intArray) {
System.out.print(a + " ");
}
System.out.println();
}
}
}
输出
4 16 16 32 64 128
2 4 32 32 64 128
4 4 64 64 128
2 8 128 128
4 8 128 128
2 4 8 128 128
4 4 8 128 128
2 8 8 128 128
4 16 128 128
请注意,两个 64 组合成第二个 128,但是这些128 并没有按应有的方式组合。
整数在一定大小后会停止正确比较吗?