数组的螺旋打印

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

  代码:

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;
    }
}

猜你喜欢

转载自blog.csdn.net/qq_36381855/article/details/79951366