这个题就是找规律,自己画个图慢慢推也能写出来。
package com.wang;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int num = scanner.nextInt();
//二位数组来装数组
int[][] arr = new int[num][num];
//-2 代表向右,-1代表向下,1向左,2向上
int[] direction = {-2,-1,1,2};
//代表上下左右的行列终点值
int endLeft = 0,endRight = num-1,endTop=0,endDown=num-1;
//数组中的数值
int step = 1;
while (endTop<=endDown){//循环条件就是最上面,最下面符合,或者使用最左,最右也行 endLeft <= endRight
for (int j = 0; j < 4; j++) {
if(direction[j]==-2){
//代表向右走,也就是最左到最右,不过是在endTop这行操作
for (int k = endLeft; k <= endRight; k++)
arr[endTop][k] = step++;
endTop++;//写完这一行,哪么这行就不在填充,endTop++代表下移一行,代表最上面
}else if(direction[j]==-1){
//代表向下走,也就是最上面到最下面,是在最右边这行操作
for (int k = endTop; k <= endDown; k++)
arr[k][endRight] = step++;
endRight--;//写完最右边这行,ednRight--代表左移一行,代表最右
}else if(direction[j]==1){
//代表左走
for (int k = endRight; k >=endLeft ; k--)
arr[endDown][k] = step++;
endDown--;
}else{
//代表上走
for (int k = endDown; k>=endTop; k--)
arr[k][endLeft] = step++;
endLeft++;
}
}
}
for (int i = 0; i < num; i++) {
for (int j = 0; j < num; j++) {
System.out.print(arr[i][j]+" ");
}
System.out.println();
}
}
}