转载及参考https://blog.csdn.net/sinat_37976731/article/details/78614723
import java.util.Scanner;
/**
* @author litianfu
* @version 1.0
* @email 1035869369@qq.com
* @date 2020-02-12 14:53
*/
public class Pattern {
static int n;
//矩阵数字总个数
static int sum;
static int flag = 1;
static int[][] pattern;
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("请输入矩阵的行列数:");
Scanner scan = new Scanner(System.in);
n = scan.nextInt();
pattern = new int[n][n];
//预处理奇偶数的不同
if(n%2==0){
sum=n*n;
} else{
sum=n*n-1;
pattern[(n-1)/2][(n-1)/2]=n*n;
}
//递归
printPattern(0);
// 输出图案
for (int[] row : pattern) {
for (int column : row) {
System.out.print(column + "\t");
}
System.out.println();
}
}
/**
* 打印图案功能,其中n为图案矩阵的行列数
*/
static void printPattern(int layer) {
// 上:赋值
for (int i = layer; i < n - layer - 1; i++) {
pattern[layer][i] = flag++;
if (flag > sum){
return;
}
}
// 右:赋值
for (int i = layer; i < n - layer - 1; i++) {
pattern[i][n - layer - 1] = flag++;
if (flag > sum){
return;
}
}
// 下:赋值
for (int i = n - layer - 1; i > layer; i--) {
pattern[n - layer - 1][i] = flag++;
if (flag > sum){
return;
}
}
// 左:赋值
for (int i = n - layer - 1; i > layer; i--) {
pattern[i][layer] = flag++;
if (flag > sum){
return;
}
}
printPattern(++layer);
}
}