51,410
社区成员
发帖
与我相关
我的任务
分享
65 64 63 62 61 60 59 58 57
66 37 36 35 34 33 32 31 56
67 38 17 16 15 14 13 30 55
68 39 18 5 4 3 12 29 54
69 40 19 6 1 2 11 28 53
70 41 20 7 8 9 10 27 52
71 42 21 22 23 24 25 26 51
72 43 44 45 46 47 48 49 50
73 74 75 76 77 78 79 80 81

public class Test01 {
public static void main(String[] args) {
spiralRectPrint(9);
}
public static void spiralRectPrint(int n){
if(n < 1){
System.out.println("输入参数不正确");
return;
}
final int TOTAL = n * n;
final int[] DIRECTION = new int[]{0,1,2,3};//右,下,左,上
final int MAX_LENGTH = String.valueOf(TOTAL).length();//最大数位数,用于打印对齐
int firstRow = 0,firstCol = 0;
int lastRow = n - 1,lastCol = n - 1;
int directionIndex = 0;//初始方向为右
int num = 1;
int[][] printArray = new int[n][n];//最后输出的数组
while(num <= TOTAL){
switch (DIRECTION[directionIndex % DIRECTION.length]) {
case 0:
for(int i = firstCol;i <= lastCol;++i)
printArray[firstRow][i] = num++;
++firstRow;
break;
case 1:
for(int i = firstRow;i <= lastRow;++i)
printArray[i][lastCol] = num++;
--lastCol;
break;
case 2:
for(int i = lastCol;i >= firstCol;--i)
printArray[lastRow][i] = num++;
--lastRow;
break;
case 3:
for(int i = lastRow;i >= firstRow;--i)
printArray[i][firstCol] = num++;
++firstCol;
break;
}
++directionIndex;
}
//输出
for(int i = 0;i < n;++i){
for(int j = 0; j < n;++j){
int value = printArray[i][j];
for(int k = 0; k <= MAX_LENGTH - String.valueOf(value).length();++k)
System.out.print(" ");
System.out.print(value);
}
System.out.println();
}
}
}