数组:根据输入的数字,形成回形数输出

回形数.比如输入9
输出:

//顺时针旋转
1 2 3
8 9 4
7 6 5
  • 初次自己尝试的时候发生了二维数组最容易出现的空指针错误。后面越写越觉得逻辑不对,随即放弃

  • 第二次,对参考代码进行学习,给源代码加上自己理解的注释

  • 第三次,注释参考代码,自己打了一遍。发生错误。在for循环中要想每次if语句完之后执行for语句中的m++,必须将非首次的if写为else if 否则不会跳出。
    代码:

    public class Exc1 {
      public static void main(String[] args) {
          System.out.println("请输入一个n*n的数字");
          Scanner scan = new Scanner(System.in);
          int len = scan.nextInt();
          int s = (int) Math.sqrt(len);
          int[][] arr = new int[s][s];//动态初始化一个n行n列的二维数组
    
         // k = 1:向右  k = 2:向下  k = 3:向左  k = 4:向上
    
          int k = 1;
          int i = 0, j = 0;
          for (int m = 1; m <= len; m++) {
              //如果第i行没有值,向右依次给i行j列赋值;否则标记k为2,同时i+1
              if (k == 1) {
                  if (j < s && arr[i][j] == 0) {
                      arr[i][j++] = m;
                  } else {
                      k = 2;
                      i++;
                      j--;
                      m--;
                  }
                  //如果第j列没有值,向下依次给i行j列赋值;否则标记k为3,同时j-1
              } else if (k == 2) {
                  if (i < s && arr[i][j] == 0) {
                      arr[i++][j] = m;
                  } else {
                      k = 3;
                      i--;
                      j--;
                      m--;
                  }
                  //如果第i行没有值,向左依次给i行j列赋值;否则标记k为4,同时i-1
              } else if (k == 3) {
                  if (j >= 0 && arr[i][j] == 0) {
                      arr[i][j--] = m;
                  } else {
                      k = 4;
                      i--;
                      j++;
                      m--;
                  }
                  //如果第j列没有值,向上依次给i行j列赋值;否则标记k为1,同时j+1
              } else if (k == 4) {
                  if (i >= 0 && arr[i][j] == 0) {
                      arr[i--][j] = m;
                  } else {
                      k = 1;
                      i++;
                      j++;
                      m--;
                  }
              }
          }  

    运行结果: