Решая задачу наткнулся на вот такую странность, от которой мозги плавятся. Вот кусок кода:
for (int i = 0; i < FIELD_WIDTH; i++) {
            for (int j = 0; j < FIELD_WIDTH; j++) {
                System.out.print(i + "" + j +  "=" + gameTiles[i][j].value + " ");
                int k = FIELD_WIDTH - 1 - i;
                int l = FIELD_WIDTH - 1 - j;
                System.out.print(k + "" + l +  "=" + gameTiles[k][l].value + " ");
                System.out.println();
                tempTiles[i][j] = gameTiles[FIELD_WIDTH - 1 - i][FIELD_WIDTH - 1 - j];
            }
        }
Казалось бы тут просто распечатывается массив "gameTiles" в 2 столбика. В одном столбике мы идем по массиву слева-направо, сверху-вниз, а в другом снизу-вверх, справа-налево. И массив в данном куске кода не меняется. Однако это не так. Вот результаты одного из тестов. 00=0 33=0 01=0 32=0 02=0 31=0 03=0 30=2 10=2 23=0 11=0 22=0 12=0 21=4 13=0 20=2 20=2 13=2 21=4 12=4 22=0 11=0 23=0 10=0 30=2 03=2 31=0 02=0 32=0 01=0 33=0 00=0 Например ячейка [1][2] имеет разное значение. Причем массив меняется в последней строке, в этой:
tempTiles[i][j] = gameTiles[FIELD_WIDTH - 1 - i][FIELD_WIDTH - 1 - j];
Если её закомментировать, то таких чудес не происходит. Может кто объяснить как так происходит?