//写一方法,打印等长的二维数组, //要求从1开始的自然数由方阵的最外圈向内螺旋方式地顺序排列。 如: n = 4 则打印: ————————————————————————————————————————————————————————————
package com.itheima;
import java.util.Scanner;
public class Test8 {
public static void main(String[] args) {
// 提示输出等长的二维数组
System.out.println("请输入要打印的等长二维数组长度:");
// 键盘录入一个整数
int num = new Scanner(System.in).nextInt();
// 定义一个二维数组,接收getShuZhu方法返回的二维数组
int[][] arr = getShuZhu(num);
// 遍历数组
print(num, arr);
}
// 遍历数组
public static void print(int num, int[][] arr) {
for (int i = 0; i < num; i++) {
int count = 0;
for (int j = 0; j < num; j++) {
System.out.print(arr[j] + "\t");
count++;
if (count % num == 0) {
System.out.println();
}
}
}
}
public static int[][] getShuZhu(int num) {
int count = 1;
int[][] arr = new int[num][num];
// 定义变量记录二维数组未填充的上边界
int sbj = 0;
// 定义变量记录二维数组未填充的下边界
int xbj = num - 1;
// 定义变量记录二维数组未填充的左边界
int zbj = 0;
// 定义变量记录二维数组未填充的右边界
int ybj = num - 1;
while (sbj <= xbj) {
// 在上边界 从左边界到右边界添加元素
for (int i = zbj; i <= ybj; i++) {
arr[sbj] = count;
count++;
}
// 上边界元素添加完毕,上边界+1
sbj++;
// 在右边界,从上边界到下边界,添加元素
for (int i = sbj; i <= xbj; i++) {
arr[ybj] = count;
count++;
}
// 右边界元素添加完毕,右边界-1
ybj--;
// 在下边界,从右边界到左边界,添加元素
for (int i = ybj; i >= zbj; i--) {
arr[xbj] = count;
count++;
}
// 下边界元素添加完毕,下边界-1
xbj--;
// 在左边界,从下边界到上边界添加元素
for (int i = xbj; i >= sbj; i--) {
arr[zbj] = count;
count++;
}
// 左边界元素添加完毕,左边界+1
zbj++;
}
// 返回二维数组
return arr;
}
}
|