A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

写一方法,打印等长的二维数组,要求从
* 1开始的自然数由方阵的最外圈向内螺旋方式地顺
* 序排列。 如: n = 4 则打印:
* 1        2        3        4
   12        13        14        5
   11        16        15        6
   10        9        8        7

1 个回复

正序浏览
  1. package cn.itheima;

  2. import java.util.InputMismatchException;
  3. import java.util.Scanner;

  4. public class Test9 {

  5.         /*
  6.          * 写一方法,打印等长的二维数组,要求从1开始的自然数由方阵的最外圈向内螺旋方式地顺序排列。 如: n = 4 则打印:                                

  7.                 1  2  3  4
  8.                 12 13 14 5
  9.                 11 16 15 6
  10.                 10 9  8  7
  11.                

  12. */
  13.        
  14.         private static int temp=1;      //设定变量将不断增加的数加载到数组中
  15.         private static int length;                //设定方阵的长,宽都 为length
  16.         private static int r,l,u,d;                //设定方阵的上下左右边界;
  17.         private static int x=0,y=0;         //坐标初始值
  18.         private static int[][] a=new int[0][0];         //使用二维数组存储数据
  19.        
  20.         public static void main(String[] args){
  21.                
  22.                 start();       
  23.         }
  24.         //方便输入者输入方阵边长
  25.         public static void start(){
  26.                 Scanner input=new Scanner(System.in);
  27.                 System.out.println("请输入一个方阵的边长(>0)");
  28.                 try{
  29.                         int m=input.nextInt();
  30.                         System.out.println("******************************");
  31.                         inputArrays(m);
  32.                         printArrays();
  33.                 }catch(InputMismatchException e){
  34.                         System.out.println("请输入>0的整数!");
  35.                         start();
  36.                 }
  37.         }
  38.         //当符合条件时,一次将改变的temp值加入到数组中。
  39.         public static void add(int x,int y){
  40.                 temp++;
  41.                 a[x][y]=temp;
  42.         }
  43.         public static void right(){ //当向右走时
  44.                 while(x<r){                                //如果坐标x小于右边界,存入数据
  45.                         add(++x,y);
  46.                 }                                               
  47.                 if(y<d){                                //若坐标y小于下边界,向下走
  48.                         u++;                                //上边界+1
  49.                         down();
  50.                 }
  51.         }
  52.         public static void down(){        //当向下走时
  53.                 while(y<d){                                //如果坐标y小于下边界,存入数据
  54.                         add(x,++y);                       
  55.                 }
  56.                 if(x>l){                                //当坐标x大于左边界时,向左走
  57.                         r--;                                //右边界-1
  58.                         left();
  59.                 }
  60.         }
  61.         public static void left(){        //当向左走时
  62.                 while(x>l){                                //如果坐标x大于走边界,存入数据
  63.                         add(--x,y);
  64.                 }
  65.                 if(y>u){                                //当坐标y大于上边界时,向上走
  66.                         d--;                                //下边界-1
  67.                         up();
  68.                 }
  69.         }
  70.         public static void up(){        //同理
  71.                 while(y>u){
  72.                         add(x,--y);
  73.                 }
  74.                 if(x<r){
  75.                         l++;                                //左边界+1
  76.                         right();
  77.                 }
  78.         }
  79.         public static void printArrays(){                 //将二维数组中的数据输出
  80.                 for(int i=0;i<length;i++){
  81.                         for(int j=0;j<length;j++){
  82.                                 System.out.print(a[j][i]+"\t");
  83.                         }
  84.                         System.out.println();        //分行
  85.                 }
  86.         }
  87.         public static void inputArrays(int len){
  88.                 l=0;r=len-1;u=0;d=len-1;        //设置上下左右边界的值
  89.                 length=len;                                        //方阵的边长
  90.                 a=new int[length][length];        //创建二维数组
  91.                 a[0][0]=temp;                                //为a[0][0]赋值
  92.                 right();                                        //定义先向右走
  93.         }
  94.        
  95.        
  96. }
复制代码

以上是代码,有图片附件偶!

无标题.png (3.09 KB, 下载次数: 17)

图片展示

图片展示
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马