数组的螺旋打印

本文介绍了一个螺旋打印算法的实现过程,该算法能够将一个二维数组按照螺旋的方式进行打印。通过定义一个20*20的二维数组,并使用螺旋顺序填充数字,最终实现了从外向内的螺旋打印效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

(一)问题,将数组按照如下方式进行打印【-->就是螺旋打印 算法】

  代码:

public class TestSpriralPrinting {
    public static void main(String[] args) {


        System.out.print("请输入一个整数(1~20): ");
        Scanner scanner = new Scanner(System.in);
        int inputNum = scanner.nextInt();
        System.out.println("inputNum: "+inputNum);
        int[][] arr = TestSpriralPrinting.getData(inputNum);//是一个20*20大小的二维数组。

        //只打印了我们需要的部分
        for (int i = 0; i < inputNum; i++) {
            for (int j = 0; j < inputNum; j++) {//打印数字前加空格,使整体对齐。
                 // 设置成 4个格子 为一个数字长度。
                if (10 > arr[i][j]) System.out.print("  " + arr[i][j] + " ");//2空格+1位数字+1空格=4
                else if (100 > arr[i][j]) System.out.print(" " + arr[i][j] + " ");//1空格+2位数字+1空格=4
                else System.out.print(arr[i][j] + " ");//3位数字+1空格=4
                if (inputNum - 1 == j) System.out.println();//进行换行
            }
        }
    }
     //将数字按照 螺旋顺序存放进去。【分成  上  右  下  左 这四个部分  依次轮圈】
    public static int[][] getData(int number) {
        // 创建一个20*20的二维数组,用于放置数据,并返回
        int[][] arrs = new int[20][20];//数组中 第一位用num表示,先初始化为1
        int num = 1;
        int i = 0;//表示数组中第一个数值
        int j = 0;//表示数组中第二个数值
        // 每次循环四边组成一个圈,多次循环之后内嵌圈
        for (int k = 0; k <= number / 2; ++k) {//圈数--->遍历多少次--->相当于  有 number/2这么多层。
             //赋值 上边(控制好结束条件)
            for (j = k, i = k; j < number - k; ++j) {
                arrs[i][j] = num;
                num++;
            }
            //赋值 右边 (控制好结束条件)
            for (j = j - 1, i = i + 1; i < number - k; ++i) {
                arrs[i][j] = num;
                num++;
            }
            //赋值下边(控制好结束条件)
            for (j = j - 1, i = i - 1; j > k - 1; --j) {
                arrs[i][j] = num;
                num++;
            }
            //赋值左边(控制好结束条件)
            for (j = j + 1, i = i - 1; i > k; --i) {
                arrs[i][j] = num;
                num++;
            }
        }
        return arrs;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值