就是对二维数组做一个对角线调换数据
效果:
* 转换之前:
* a[0][0]=1 a[0][1]=2 a[0][2]=3* a[1][0]=4 a[1][1]=5 a[1][2]=6
* a[2][0]=7 a[2][1]=8 a[2][2]=9
* 转换之后:
* a[0][0]=9 a[0][1]=2 a[0][2]=7
* a[1][0]=4 a[1][1]=5 a[1][2]=6
* a[2][0]=3 a[2][1]=8 a[2][2]=1
代码部分:
public static void main(String[] args) {
//初始化数据 并输出 既然要进行对角线转换 行和列就要一样 不然也没有了对角线的意义
int a[][] = getArray(4);
changeArray(a);
}
//初始化数据 并输出
public static int[][] getArray(int num){
//构造数据
int [][] a = new int[num][num] ;
int flag = 1;
for(int i=0; i<num; i++){
for(int j=0; j<num; j++){
a[i][j] = flag;
flag++;
}
}
//初始数据输出
System.out.println("原始数据输出...");
outArray(a);
return a;
}
//对角线对称变换并输出
public static void changeArray(int [][] a){
if(a != null)
{
//获取数组的行
int row = a.length; //数组下标从0开始
//范围内据行数确定需要进行转换的行 奇数行中间的一个不需要转换 偶数上面一半数据和下面一半进行调换就行了
int changeRow = row%2 == 0 ? row/2 : (int)Math.floor(row*1.0/2);
row--; //数组下标从0开始对row减一
for(int i=0; i<changeRow; i++)
{
//数组左对角线数据调换
int temp = a[i][i];
a[i][i] = a[row-i][row-i];
a[row-i][row-i] = temp;
//右对角线数据调换
temp = a[i][row-i];
a[i][row-i] = a[row-i][i];
a[row-i][i] = temp;
}
}
else
{
System.out.println("数组为空!");
}
System.out.println("排序后数据输出");
//数据输出
outArray(a);
}
public static void outArray(int[][] a){
for(int i=0; i<a.length ;i++){
for(int j=0; j<a[i].length ;j++){
System.out.print("\ta["+i+"]["+j+"]=" + a[i][j]);
}
System.out.println();
}
}