首先贴代码
import java.util.Scanner;
/*
要求:输出打印螺旋方阵
思路:
1、把螺旋方阵拆成四种循环,依次分别为,往右赋值,往下赋值,往左赋值,往上赋值
2、建立二维数组,用索引来控制整个复制过程
3、找到思路1中四种循环的起点开始赋值
4、思路1循环赋值一次后,存在一个最外围的大圈,开始找第二个大圈的起点
5、找到第二个大圈的起点开始赋值
6、重复上述步骤,直到方阵填满(填满的次数 = 方阵的边长 / 2 + 1;)
7、打印出二维数组
*/
public class Demo {
public static void main(String[] args) {
// 建立键盘录入对象
Scanner sc = new Scanner(System.in);
// 设 x 为二维数组的横轴,y 为二维数组的纵轴,
int x = 0, y = 0;
// 创建变量从1开始赋值
int n = 1;
// 打印提示语句
System.out.println("请输入您想要的螺旋方阵的大小:");
// 输入螺旋方阵的大小
int temp = sc.nextInt();
// 建立二维数组存储数据
int[][] arr = new int[temp][temp];
// 建立控制循环
for (int i = 0; i < arr.length; i++) {
// 固定横轴,纵轴依次相加依次赋值
// for循环中的初始化部分为螺旋方阵赋值的起点
for (x = x, y = y; y < arr.length - i; y++) {
arr[x][y] = n++;
}
// 固定纵轴,横轴依次相加依次赋值
// for循环中的初始化部分为螺旋方阵赋值的第一个转折点
for (x = x + 1, y = y - 1; x < arr.length - i; x++) {
arr[x][y] = n++;
}
// 固定横轴,纵轴依次相减赋值
// for循环中的初始化部分为螺旋方阵赋值的第二个转折点
for (x = x - 1, y = y - 1; y >= i; y--) {
arr[x][y] = n++;
}
// 固定纵轴,横轴依次相减赋值
// for循环中的初始化部分为螺旋方阵赋值的第三个转折点
for (x = x - 1, y = y + 1; x >= i + 1; x--) {
arr[x][y] = n++;
}
//一次大循环后,索引值要分别加一,x加一是因为为了不越界,y加一是为了成为下一个循环的起点
x = x + 1;
y = y + 1;
}
// 输出打印这个二维数组
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr.length; j++) {
if (arr[i][j] >= 1 && arr[i][j] <= 9) {
System.out.print(arr[i][j] + " ");
} else if (arr[i][j] >= 10 && arr[i][j] <= 99) {
System.out.print(arr[i][j] + " ");
} else if (arr[i][j] >= 100 && arr[i][j] <= 999) {
System.out.print(arr[i][j] + " ");
} else if (arr[i][j] >= 1000 && arr[i][j] <= 9999) {
System.out.print(arr[i][j] + " ");
}
}
System.out.println();
}
}
}
上传图片为这个代码的效果图
|
|