楼主 我这里有个简单的 也有注释
- package com.itheima;
- import java.util.Scanner;
- /**
- * 需求: 9、 写一方法,打印等长的二维数组,要求从1开始的自然数由方阵的最外圈向内螺旋方式地顺序排列。 如: n = 4 则打印:
- 1 2 3 4
- 12 13 14 5
- 11 16 15 6
- 10 8 9 7
-
- @author 刘阳文
- * */
- public class Test9
- {
- public static void main(String[] args)
- {
- Scanner input = null; //键盘录入
- try
- {
- input = new Scanner(System.in);
- System.out.println("请输入数字:");
- // 要打印的长度
- int count = input.nextInt();
- // 声明等长的二维数组
- int[][] arr = new int[count][count];
- // 生成螺旋数组
- genericArray(arr, (count * count));
- // 打印结果到控制台
- System.out.println("生成的螺旋数组如下:");
- print(arr, count);
- } catch (Exception e)
- {
- System.out.println("输入非法,请输入数字");
- } finally
- {
- try
- {
- if (input != null)
- input.close();
- } catch (Exception e2)
- {
- System.out.println("关闭流失败");
- }
- }
- }
- // 生成螺旋数组
- private static void genericArray(int[][] arr, int value)
- {
- int n = 1;// 初始数值
- // (arr.length+1)/2是圈数
- for (int i = 0; i < (arr.length + 1) / 2; i++)
- {
- int index = arr.length - i - 1;
- // 大圈套小圈
- if (quan(arr, i, index, n, value) != null)
- n = quan(arr, i, index, n, value);
- }
- }
- // 跑圈
- private static Integer quan(int[][] arr, int i, int index, int n, int value)
- {
- // 左 ---> 右
- for (int j = i; j < index + 1; j++)
- {
- arr[i][j] = n++;
- if (n == value)// 数组数值已满,结束本功能
- return null;
- }
- // 上 ---> 下 最上面一个去除
- for (int j = i + 1; j < index + 1; j++)
- {
- arr[j][index] = n++;
- }
- // 右 ---> 左 最右边一个去除
- for (int j = index - 1; j >= i; j--)
- {
- arr[index][j] = n++;
- }
- // 下 ---> 上 去除最上面一个和最下面一个
- for (int j = index - 1; j > i; j--)
- {
- arr[j][i] = n++;
- }
- return n;
- }
- // 打印二维数组
- private static void print(int[][] arr, int n)
- {
- for (int i = 0; i < arr.length; i++)
- {
- for (int j = 0; j < arr[i].length; j++)
- {
- if (j % n == 0)
- System.out.println();
- System.out.print(arr[i][j] + "\t");
- }
- }
- }
- }
复制代码 |