把一个数组按对角线做对称变换,并输出!

    就是对二维数组做一个对角线调换数据

     效果:

     *  转换之前:

     * 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();
        }
    }
   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值