题目
从键盘输入一个整数(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
参考
参考网址
代码
public class LoopsNumber {public static void main(String[] args) {System.out.println("请输入回形数矩阵的大小:");Scanner scanner = new Scanner(System.in);int num = scanner.nextInt();loop(num);scanner.close();}public static void loop(int num) {int[][] arr = new int[num][num];
// 右箭头方向
// arr[0][0]=1;
// arr[0][1]=2;
// arr[0][2]=3;
// 下箭头方向
// arr[1][2]=4;
// arr[2][2]=5;
// arr[2][1]=6;
// 左箭头方向
// arr[2][0]=7;
// arr[1][0]=8;
// 上箭头方向
// arr[1][1]=9;// 值int value=1;
// 行int i=0;
// 列int j=0;
// 矩阵最中心的值为num*num,此时赋值结束while (arr[i][j]!=Math.pow(num,2)){arr[i][j]=value;/*当遇到四个角的拐点时,进行判断,然后对i和j的值进行递增或者递减;int型的二维数组在没有赋值时内层元素默认为0,作为判断条件*/
//右箭头方向赋值if(j!=num-1&&arr[i][j+1]==0){
//为了预防还没有走到最上面就往右箭头方向赋值if (i>0&&arr[i-1][j]==0){i--;}else {j++;}
//下箭头方向赋值}else if (i!=num-1&&arr[i+1][j]==0){i++;
//左箭头方向赋值}else if (j>0&&arr[i][j-1]==0){j--;
//上箭头方向赋值}else if (i>0&&arr[i-1][j]==0){i--;}value++;}for (int[] ints : arr) {for (int anInt : ints) {System.out.print(anInt + "\t");}System.out.println();}}
}