将N * N矩阵旋转9à度到右侧inPlace

时间:2017-12-11 15:21:03

标签: java matrix 2048

我正在尝试使用Java制作一个2048游戏机,我想将棋盘旋转90度向右,我在网上搜索并实现了一个功能,但它并没有交换每一行和colums,有人可以回顾一下我写的内容并帮助我查明代码中的实际错误。

public static void rotation90Droite(int [][] vals) {

    int e = vals.length-1;
    int c = e / 2;
    for (int i = 0; i <= c ; i++) {
        for (int j = i; j <e - i; j++) {
            int t   = vals[i][j];


            vals[i][j] = vals[e - j][i];

            vals[e - j][i] = vals[e - i][e - j];

            vals[e - i][e - j] = vals[j][e - i];

            vals[j][e - j] = t;
        }
    }
}
public static void printMatrix(int[][] Matrix) {

    for(int i = 0; i < Matrix.length; i++) {
        for (int j = 0; j < Matrix.length; j++) {
            System.out.print(Matrix[i][j]+ " ");
        }
        System.out.println(" ");
    }
}


public static void main(String[] args) {

    int[][] vals = {{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}} ;
    printMatrix(vals);
    System.out.println(" ");
    rotation90Droite(vals);
    printMatrix(vals);

    }
}

这实际上应该使第一行成为最后一列,最后一列成为最后一行等......

我真正得到的是:

1 2 3 4  
5 6 7 8 // Starting matrix 
9 10 11 12  
13 14 15 16  

13 9 5 1  
14 3 6 8   // end matrix 
15 11 2 12  
16 12 8 4  

正如你可以看到最后一行正确地交换但是这么多的值不在正确的位置,我找不到原因。任何帮助将不胜感激,谢谢你提前

1 个答案:

答案 0 :(得分:0)

像这样的几何问题通常会对您访问数组元素的方式有一个模式。如果你读完你正在使用的索引,循环中的最后一个赋值与模式不完全匹配:

vals[j][e - j] = t;

应该是:

vals[j][e - i] = t;

这是working demo

对于未来,learning to use a debugger将是解决这些问题的极有价值的工具。