黑马程序员技术交流社区

标题: 关于打印螺旋数组一个小方法。 [打印本页]

作者: NCry    时间: 2014-11-17 23:33
标题: 关于打印螺旋数组一个小方法。
本帖最后由 NCry 于 2014-11-17 23:35 编辑
  1. /*1        2        3        4        5        
  2. 16        17        18        19        6        
  3. 15        24        25        20        7        
  4. 14        23        22        21        8        
  5. 13        12        11        10        9
  6. */
  7. public class LuoXuanDemo2 {
  8.         public static void main(String[] args) {
  9.                 fun(3);                                                                        
  10.         }
  11.         private static void fun(int i) {
  12.                 if(i<=0){
  13.                         System.out.println("输入数字有误,请输入大于零的数字");
  14.                         System.exit(0);
  15.                 }
  16.                 int count = 0,x=0,y=-1,size=i,l=0,temp=size;
  17.                 int[][] arr = new int[size][size];        //定义数组容器
  18.                 for(int q=0;q<(size+1)/2;q++){
  19.                         temp--;                                
  20.                         while(y<temp)        arr[x][++y]=++count;                 //获取第一行1-5                                                                        
  21.                         while(x<temp)        arr[++x][y]=++count;                //获取右边第一列                                       
  22.                         while(y>l)         arr[x][--y]=++count;                //获取最后一行                        
  23.                         l++;
  24.                         while(x>l)        arr[--x][y]=++count;                //获取左边第一列                                       
  25.                 }
  26.                 for(int a=0;a<size;a++){                                //打印二维数组
  27.                         for(int b=0;b<size;b++){
  28.                                 System.out.print(arr[a][b]+"\t");
  29.                         }
  30.                         System.out.println();
  31.                 }
  32.         }               
  33. }
复制代码
这是一个打印如上图的图形。这个是我们的作业题花了好长时间才搞出来。希望能给大家分享下。求支持,求顶啊!!!!


作者: 夏至落叶    时间: 2014-11-17 23:37
大神,1103班威武,柳柳老师威武
作者: a986875894    时间: 2014-11-17 23:39
大神  受教了!
作者: ls61532529    时间: 2014-11-17 23:41
楼主的方法不错很好用 我用过之后就好像任督二脉都开了
作者: NCry    时间: 2014-11-17 23:42
a986875894 发表于 2014-11-17 23:39
大神  受教了!

不是大神啦,亲。只写写了一点小东西,给大家分享下。
作者: NCry    时间: 2014-11-17 23:44
ls61532529 发表于 2014-11-17 23:41
楼主的方法不错很好用 我用过之后就好像任督二脉都开了

:handshake
作者: FlyFish    时间: 2014-11-18 09:51
看不太懂……能给解释一下吗?
作者: NCry    时间: 2014-11-18 12:39
FlyFish 发表于 2014-11-18 09:51
看不太懂……能给解释一下吗?

代码后面有注释的,你哪个看不懂?
作者: FlyFish    时间: 2014-11-18 19:48
NCry 发表于 2014-11-18 12:39
代码后面有注释的,你哪个看不懂?

for(int q=0;q<(size+1)/2;q++){
                        temp--;                                
                        while(y<temp)        arr[x][++y]=++count;                 //获取第一行1-5                                                                        
                        while(x<temp)        arr[++x][y]=++count;                //获取右边第一列                                       
                        while(y>l)         arr[x][--y]=++count;                //获取最后一行                        
                        l++;
                        while(x>l)        arr[--x][y]=++count;                //获取左边第一列                                       
                }
这个for看不懂,想不上去
作者: NCry    时间: 2014-11-18 22:48
FlyFish 发表于 2014-11-18 19:48
for(int q=0;q

这个for循环的目的是为了让他让他在temp和l数值在不满足条件的时候能够退出来。需要循环的次数就是size+1)/2。所以用for循环。
作者: zbt    时间: 2014-11-18 23:20
大神啊,我编的不通用。
作者: 迷失的小Z    时间: 2014-11-18 23:30
搬回去好好研究研究……
作者: 932755233    时间: 2014-11-18 23:49
好高深的样子、、、、收下去研究了

作者: 932755233    时间: 2014-11-18 23:50
一开始看着没思路,感觉纠结死了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2