从键盘输入一个整数(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

典型的回形针问题。开始入手的时候就要考虑总体框架,如我们发现它总是以上下左右四个方向进行的循环规律,而且相邻位置相差1,但循环多久,几次我们并不知道。换个角度考虑,矩阵的大小与元素个数是固定的,如果它有n行n列,那么只需要进行n^2次循环,该循环就能自动结束,我们可以进行一个1>n^2次的循环,并把它赋值给数组的各个元素。

首先我们完成输入矩阵大小的需求,运用Scanner函数,提前导入相应的包。

import java.util.Scanner;
 public class Arrexer5 {
 public static void main(String[] args) {
     Scanner scan=new Scanner(System.in);
     int len=scan.nextInt();

之后由于矩阵是二维的,我们需要建立一个二维数组,并同时提前定义一个变量存储矩阵所有元素的数量,为之后循环做好准备。

int c=len*len;
  int[][]arr=new int[len][len];

首先设置循环

for (int m = 1; m <= c; m++) {
}

之后我们考虑从上下左右四个方向开始利用m对数组进行赋值,考虑运用if函数分为4种情况,并实现首尾呼应进行循环。

int k=1;
if(k==1){               //右
}else if(k==2){      //下
}else if(k==3){      //左  
}else (k==4){        //上

定义一个变量k,分为上下左右4种情况。之后我们考虑怎么把他们串起来,在该方向赋值完成以后怎么换方向赋值并停止,那么我们可以在各个情况下再使用if函数,继续分为两类情况。考虑到后续要对二维数组进行赋值,我们先定义两个变量i,j,用它们来确定数组各个元素的位置。

int i=0;
  int j=0;if(k==1){
             if(j<len&&arr[i][j]==0){
                 arr[i][j++]=m;
             }else{
                 k=2;
                 j--;
                 m--;
                 i++;
             }
         }else if(k==2){
             if(i<len&&arr[i][j]==0){
                 arr[i++][j]=m;
             }

以右方向为例。首先我们要确保该方向不能一直进行下去,因为矩阵是有边界的。我们让j<len,之后并上arr[i][j]==0),确保该位置未被赋值过,我们才对它进行赋值。其中j++需要注意,它是先进行赋值再+1。而等全部位置赋完以后,j继续+1等于len,此时它就不满足第一个条件,我们可以考虑将它转入第二个方向了。设置k=2,之后j--,令j回到len-1,而m此时已经等于len+1,当转入下一个方向时还会进行一次循环再+1,所以需要对m--。由于下一次循环中m会是m+1,所以需要i++,正好接上下一个位置。

需要注意的时这样写else if(i<len&&k==2)是不可以的,因为它会在i=len的情况下进不了之后的任何选择,它和

if(k==1){
             if(j<len&&arr[i][j]==0){

是完全不同的两种情况。

之后只需要重复以上步骤,在交界处进行数值调整,最后进行遍历得到结果。

奉上代码

import java.util.Scanner;
 public class Arrexer5 {
 public static void main(String[] args) {
     Scanner scan=new Scanner(System.in);
     int len=scan.nextInt();
     int c=len*len;
     int[][]arr=new int[len][len];
     int k=1;
     int i=0;
     int j=0;
     for (int m = 1; m <= c; m++) {
         if(k==1){
             if(j<len&&arr[i][j]==0){
                 arr[i][j++]=m;
             }else{
                 k=2;
                 j--;
                 m--;
                 i++;
             }
         }
         else if(k==2){
             if(i<len&&arr[i][j]==0){
                 arr[i++][j]=m;
             }else{
                 k=3;
                 i--;
                 m--;
                 j--;
             }
         }else if(k==3){
             if(j>=0&&arr[i][j]==0){
                 arr[i][j--]=m;
             }else{
                 k=4;
                 j++;
                 i--;
                 m--;
             }
         } else if(k==4){
             if(i>=0&&arr[i][j]==0){
                 arr[i--][j]=m;
             }else{
                 k=1;
                 i++;
                 j++;
                 m--;
             }
         }
     }    for (int d = 0; d < arr.length; d++) {
         for (int e = 0; e < arr[d].length; e++) {
             System.out.print(arr[d][e]+" ");
         }
         System.out.println();
     }
 }  
 }