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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 13556793092 中级黑马   /  2015-9-15 12:33  /  547 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

螺旋打印矩形,需求,4个while循环解决,曾经看到过,麻烦上下代码 大神

1 个回复

倒序浏览
因为是n*n的二维数组,所以将其看作是行列式,利用坐标赋值
观察打印的结果可以看出,每一圈的个数是(n-1)*4,上下左右每一行的个数是n-1,然后赋值完之后行坐标和列坐标a,b会回到起始点,所以每次进入内圈的时候都定义了起始点,因此在第一次赋值的时候接受的坐标参数是-1和-1
  1. public static void show(int num){
  2.                 //定义二维数组
  3.                 int[][] arr = new int[num][num];
  4.                
  5.                 //定义坐标
  6.                 int a = -1 , b = -1;
  7.                
  8.                 //定义count
  9.                 int count = 1;
  10.                
  11.                 //定义外圈的一行或者一列的个数
  12.                 int n = arr.length;
  13.                
  14.                 fuZhi(arr,a,b,count,n);
  15.                 printArray(arr);
  16.         }
  17.         private static void fuZhi(int[][] arr, int a, int b, int count, int n) {
  18.                 // TODO Auto-generated method stub
  19.                 //每次调用都把坐标指向圈的左上角
  20.                 a += 1;
  21.                 b += 1;
  22.                
  23.                 //定义k记录住每一圈的个数
  24.                 int k = 1;
  25.                
  26.                 //为上面赋值
  27.                 while(k<= (n-1)*1){
  28.                         arr[a][b++] = count;
  29.                         count++;
  30.                         k++;
  31.                 }
  32.                 //为右边赋值
  33.                
  34.                 while(k<=(n-1)*2){
  35.                         arr[a++][b] = count;
  36.                         count++;
  37.                         k++;
  38.                 }
  39.                
  40.                 //为底面赋值
  41.                 while(k <= (n-1)*3){
  42.                         arr[a][b--] = count;
  43.                         count++;
  44.                         k++;
  45.                 }
  46.                
  47.                 //为左边赋值
  48.                 while(k <= (n-1)*4){
  49.                         arr[a--][b] = count;
  50.                         count++;
  51.                         k++;
  52.                 }
  53.                
  54.                 //进入内圈行或者列要-2
  55.                 n -=2;
  56.                
  57.                 //当进入最内圈时偶数个n会等于0,奇数个 n会等于1
  58.                 if(n==0)
  59.                         return;
  60.                 if(n==1){
  61.                         arr[a+1][b+1] = count;
  62.                         return;
  63.                 }
  64.                 fuZhi(arr,a,b,count,n);
  65.                
  66.         }       
  67.        
  68.         //打印二维数组
  69.         private static void printArray(int[][] arr) {
  70.                 // TODO Auto-generated method stub
  71.                 for(int[] ar : arr){
  72.                         for(int a : ar)
  73.                                 System.out.print(a+"\t");
  74.                         System.out.println();
  75.                         System.out.println();
  76.                 }
  77.         }

  78. }
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马