0

为了好玩,我正在制作一个 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 并没有按应有的方式组合。
整数在一定大小后会停止正确比较吗?

4

0 回答 0