* 7、写一方法,打印等长的二维数组,要求从1开始的自然数由方阵的最外圈向内螺旋方式地顺序排列。 如: n = 4 则打印:
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
*/
public class Test07 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in); //创建Scanner对象, 用于接收键盘录入的数组长度
System.out.println("请输入二维数组长度n的值: "); //提示用户输入
int n = sc.nextInt();
int[][] arr = new int[n][n]; //创建用键盘录入的长度值,创建二维数组
int now = 1; //设定初始值
int start = 0;
int end = n - 1;
//向上赋值, 列值为向左赋值的结尾固定不变, 行值从向左赋值结尾开始递减, 进行向上赋值, 达到末尾减1处停止
public static int toUp(int[][] arr, int start, int end, int now) {
for (int i = end; i > start; i--) {
arr[i][start] = now;
now++;
}
//返回当前赋值进度
return now;
}
//向左赋值, 行值为向下赋值的结尾固定不变, 列值从向下赋值的结尾开始递减, 进行向左赋值, 达到末尾减1处停止
public static int toLeft(int[][] arr, int start, int end, int now) {
for (int i = end; i > start; i--) {
arr[end][i] = now;
now++;
}
//返回当前赋值进度
return now;
}
//向下赋值, 列值为向右赋值的结尾固定不变, 从向右赋值开始位置递增, 进行向下赋值,达到末尾减1处停止
public static int toDown(int[][] arr, int start, int end, int now) {
for (int i = start; i < end; i++) {
arr[i][end] = now;
now++;
}
//返回当前赋值进度
return now;
}
//首先向右赋值,行值不变,列值递增, 达到末尾减1处停止
public static int toRight(int[][] arr, int start, int end, int now) {
for (int i = start; i < end; i++) {
arr[start][i] = now;
now++;
}
//返回当前赋值进度
return now;
}
//打印数组
public static void show(int[][] arr) {
for (int[] is : arr) {
for (int i : is) {
System.out.print(i + "\t");
}
System.out.println();
}
}