日期:2014-05-20 浏览次数:20987 次
int[][] a={{1,2,3,4},
{5,6,7,8},
{9,10,11,12},
{13,14,15,16},};
int tmp;
for (int i=0; i<4; i++) { //行转列,按对角线交换
for (int j=i; j<4; j++) {
tmp = a[i][j];
a[i][j] = a[j][i];
a[j][i] = tmp;
}
}
for (int i=0; i<2; i++) { //然后再按列平移
for (int j=0; j<4; j++) {
tmp = a[j][i];
a[j][i] = a[j][3-i];
a[j][3-i] = tmp;
}
}
for (int i=0; i<4; i++) {
System.out.println(Arrays.toString(a[i]));
}
------解决方案--------------------
因为旋转是在同一个数组中进行,你进行了重复的交换。
比如第一次遍历:1和4换,2和8换,3和12换,但此时a[0][3]=1,所以1又和16交换。
重复交换后的值为你得出的结果。
而且在同一个数组中操作,你的行列值必须相同,没什么意义。
如果你确实想交换的话,可以定义一个4乘4 boolean数组,记录已经交换过的值,以后不再交换就可得出你想要的结果。