day09

题目描述

给你一个正整数 n ,生成一个包含 1 到 n的平方 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形二维整型数组 matrix ,并将其打印出来.

思路图

代码

public class day9 {
    public static void main(String[] args) {
        //测试用例
        solution(3);
        System.out.println("**************");
        solution(6);
    }
    public static void solution(int n){
        //赋值用到的数
        int num=1;
        //定义二维数组
        int[][] array=new int[n][n];
        //给定行数列数最大最小值
        int cmax=n-1;
        int rmax=n-1;
        int cmin=0;
        int rmin=0;
        //出现整数平方结束循环
        while (num<n*n){
            //行数不变列数增加,最小行数加1
            for (int j = rmin; j <=rmax; j++) {
                array[cmin][j]=num;
                num=num+1;
                if(j==rmax){
                    cmin++;
                    break;
                }
            }
            //列数不变,行数增加,最大列数减1
            for(int j=cmin;j<=cmax;j++){
                array[j][rmax]=num;
                num=num+1;
                if(j==cmax){
                    rmax--;
                    break;
                }
            }
            //行数不变列数减少,最大行数减一
            for(int j=rmax;j>=rmin;j--){
                array[cmax][j]=num;
                num=num+1;
                if(j==rmin){
                    cmax--;
                    break;
                }
            }
            //列数不变,行数减少,最小列数加1
            for(int j=cmax;j>=cmin;j--){
                array[j][rmin]=num;
                num=num+1;
                if(j==cmin){
                    rmin++;
                    break;
                }
            }
        }
        //n为奇数时(n-2,n-2)即中心值必须单独赋值,尝试依靠循环解决,没成功
        if(n%2!=0){
            array[n-2][n-2]=n*n;
        }
        //遍历二维数组
        for (int i = 0; i < array.length; i++) {
            for (int j = 0; j < array.length; j++) {
                System.out.print(array[i][j]+"\t");
                if(j== array.length-1){
                    System.out.println();
                }
            }
        }
    }

}

 遇到一个问题

循环对于偶数的可以完美的赋值,但是奇数的时候中心无法赋值,修改几次要么还是赋值不上,要么赋值比预期大一,比如n=3时中心值要么为0要么为10,最终还是添加了if语句给中心值赋值,不知道该改循环哪里

示例

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冉卿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值