原地向右旋转 N*N 矩阵 9à 度
rotate a N*N Matrix by 9à degrees to right inPlace
我正在尝试在 Java 中制作一个控制台 2048 游戏,我想将棋盘向右旋转 90 度,我在网上搜索并实现了一个功能但是它不会交换每一行和每列,有人可以检查我写的内容并帮助我查明我的代码中的实际错误。
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
如您所见,最后一行已正确交换,但很多值不在正确的位置,我找不到原因。任何帮助将不胜感激,谢谢你提前
像这样的几何问题通常有一个模式来说明您如何访问数组的元素。如果您通读正在使用的索引,循环中的最后一个赋值与模式不完全匹配:
vals[j][e - j] = t;
应该是:
vals[j][e - i] = t;
这是一个working demo。
将来,learning to use a debugger 将成为解决此类问题的极有价值的工具。
我正在尝试在 Java 中制作一个控制台 2048 游戏,我想将棋盘向右旋转 90 度,我在网上搜索并实现了一个功能但是它不会交换每一行和每列,有人可以检查我写的内容并帮助我查明我的代码中的实际错误。
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
如您所见,最后一行已正确交换,但很多值不在正确的位置,我找不到原因。任何帮助将不胜感激,谢谢你提前
像这样的几何问题通常有一个模式来说明您如何访问数组的元素。如果您通读正在使用的索引,循环中的最后一个赋值与模式不完全匹配:
vals[j][e - j] = t;
应该是:
vals[j][e - i] = t;
这是一个working demo。
将来,learning to use a debugger 将成为解决此类问题的极有价值的工具。