回形数格式方阵的实现
从键盘输入一个整数(1~20)
则以该数字为矩阵的大小,把1,2,3…n*n 的数字按照顺时针螺旋的形式填入其中。
例如:
输入数字2,则程序输出:
1 2
4 3
输入数字3,则程序输出:
1 2 3
8 9 4
7 6 5
输入数字4, 则程序输出:
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
import java.util.Scanner;
public class HuiWen_leak {
public static void main(String[] args) {
System.out.println("请输入数组方阵的阶数len:");
Scanner scan = new Scanner(System.in);
int len = scan.nextInt();
scan.close();
int[][] arr = new int[len][len];
int x = 1; // 用来对数组矩阵元素赋值,加入自增
// 数组元素的赋值 ------------------------------------------------
for (int m = 0; m < len / 2; m++) {
// 设置flag判断数组矩阵元素的赋值方向
// 当flag%4分别是1,2,3,4时,代表→ ↓ ← ↑的顺序依次赋值
int flag = 1;
// → ---------
if (flag % 4 == 1) {
flag++;
for (int i = m, j = m; j < len - 1 - m; j++) {
arr[i][j] = x;
x++;
}
}
// ↓ ---------
if (flag % 4 == 2) {
flag++;
for (int i = m, j = len - 1 - m; i < len - 1 - m; i++) {
arr[i][j] = x;
x++;
}
}
// ← ---------
if (flag % 4 == 3) {
flag++;
for (int i = len - 1 - m, j = len - 1 - m; j > m; j--) {
arr[i][j] = x;
x++;
}
}
// ↑ ----------
if (flag % 4 == 0) {
flag++;
for (int i = len - 1 - m, j = m; i > m; i--) {
arr[i][j] = x;
x++;
}
}
}
// 遍历输出数组元素------------------------------------------
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr.length; j++) {
if (arr[i][j] < 10)
System.out.print("0" + arr[i][j] + " ");
else
System.out.print(arr[i][j] + " ");
}
System.out.println();
}
}
}
如果输入的阶数是奇数,那最中间元素就会是0
如果输入的阶数是偶数,就不会有问题,这是为什么呢?
请输入数组方阵的阶数len:
3
01 02 03
08 00 04
07 06 05
请输入数组方阵的阶数len:
5
01 02 03 04 05
16 17 18 19 06
15 24 00 20 07
14 23 22 21 08
13 12 11 10 09
请输入数组方阵的阶数len:
6
01 02 03 04 05 06
20 21 22 23 24 07
19 32 33 34 25 08
18 31 36 35 26 09
17 30 29 28 27 10
16 15 14 13 12 11