(一)问题,将数组按照如下方式进行打印【-->就是螺旋打印 算法】
代码:
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; } }