题目:二维数组翻转,如下图:
首先,我们创建这个二维数组并遍历他,即:
第一步
int[][] arr = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr.length; j++) {
System.out.print(arr[i][j] + " ");
}
System.out.println();
}
这样,我们拿到了这个二维数组,接下来就是对这个二维数组进行翻转,分析这个翻转图,可以发现:
这个二维数组的
[0][1]和[1][0]换
[0][2]和[2][0]换
[1][2]和[2][1]换
这是一个有规律的交换,所以可以用for循环来解决这个问题,即:
第二步
for (int i = 0; i < arr.length; i++) {
// [0][1]和[1][0]换
// [0][2]和[2][0]换
// [1][2]和[2][1]换
// 可以发现,j < i,不然就又交换回去了
for (int j = 0; j < i; j++) {
int a = arr[i][j];
arr[i][j] = arr[j][i];
arr[j][i] = a;
}
}
解释,j < i是因为如果j >= i的话就相当于本来交换过来的顺序又交换了一遍交换回去,就没有意义了
所以最终的代码就为:
最终代码
public class Demo {
public static void main(String[] args) {
int[][] arr = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr.length; j++) {
System.out.print(arr[i][j] + " ");
}
System.out.println();
}
System.out.println("===============");
// 分析:我们可以看出二维数组的翻转后的交换
//遍历这个二维数组
for (int i = 0; i < arr.length; i++) {
// [0][1]和[1][0]换
// [0][2]和[2][0]换
// [1][2]和[2][1]换
// 可以发现,j < i,不然就又交换回去了
for (int j = 0; j < i; j++) {
int a = arr[i][j];
arr[i][j] = arr[j][i];
arr[j][i] = a;
}
}
for (int[] is : arr) {
for (int i : is) {
System.out.print(i + " ");
}
System.out.println();
}
}
}
控制台打印结果为:
1 2 3
4 5 6
7 8 9
===============
1 4 7
2 5 8
3 6 9