黑马程序员技术交流社区

标题: 求解螺旋打印数组为什么偶数能出来结果,基数不行??? [打印本页]

作者: 一个大西瓜    时间: 2016-7-9 21:48
标题: 求解螺旋打印数组为什么偶数能出来结果,基数不行???
求解下面程序为什么不能求出n为基数的情况??基数的时候就会死循环,求求求~~~~~~~~~~~~~

package com.heima.test;

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

*/                                                  
public class Test8 {

        public static void main(String[] args)
        {
                int[][] arr = drawCir(6);
                for(int a=0;a<6;a++)
                {
                        System.out.println();
                        for(int b=0;b<6;b++)
                        {
                                System.out.print(arr[a][b]+"\t");
                        }
                       
                }
        }
        //每一圈左上角的数字是最小的设为min
        //每一圈有(n-1)*4个数字, 圈数设为count
       
        public static int[][] drawCir(int n)
        {
                int[][] arr = new int[n][n];
                int step = 1;  //移动的次数
                int move = 1;
                //表示指针移动的方向  指针其实位置都是左上   
                /*
                 * 观察得数字运动路线为:右,下,左,上。所有定义变量来记录上一个数字运动方向。
                  右:1  下:2  左:3 上:4 .第一步肯定往右,所有move初始值为1.
                 */
                int start = 0;
                int end = n-1;
                while(step<((n*n)+1))
                {
                        switch(move)
                        {
                        case 1:
                        {
                               
                                int a= start;
                                while(a<end)
                                        arr[start][a++]=step++;
                                //System.out.print(step);
                        }
                        case 2:
                        {
                       
                                int a= start;
                                while(a<end)
                                        arr[a++][end]=step++;
                                //System.out.print(step);
                        }
                        case 3:
                        {
                               
                                int a= end;
                                while(a>start)
                                        arr[end][a--]=step++;
                                //System.out.print(step);
                        }
                        case 4:
                        {
                               
                                int a= end;
                                while(a>start)                                                       
                                        arr[a--][start]=step++;      
                                //System.out.print(step);   
                        }
                        default:
                                break;
                        }
                start++;
                end--;
                if(start==end)
                        arr[start][end]=n*n;
                }
                return arr;
               
        }
}

结果为


1        2        3        4        5        6       
20        21        22        23        24        7       
19        32        33        34        25        8       
18        31        36        35        26        9       
17        30        29        28        27        10       
16        15        14        13        12        11       






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