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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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


package com.itheima;


public class Test9 {
    public static void main(String[] args){
            arrayNum(4);
    }

//便于改代码..输入不同y值输出不同的二维数列
    private static void arrayNum(int y)
    {

            int[][]arr=new int [y][y];

            specArr(arr);
            arrPrint(arr);
    }

   //高级for输出打印用的
    private static void arrPrint(int[][] h) {
            for(int[] in:h)
            {
                    for(int t:in)
                    {        
                            System.out.print(t+" \t");   
                            //if(t<10)System.out.print(t+" \t");
                            //else System.out.print(t+" \t");
                    }
                    System.out.println();
            }

    }

//从0开始  一层一层写进去.. 给二维数组赋值
    private static void specArr(int[][]arr) {

                int n=arr.length ;
                    int max=0;//从1开始赋值
             int count=0;//        循环的圈数
            while (n>0){
                    int j=0;//指针作用
                    for(int i=0;i<(n-1)*4;i++)
                    {
                    if (i<n-1)  arr[0+count][i+count]=++max;
                    else if (i<2*n-2) arr[count+j++][arr.length-1-count]=++max;//自加后赋值   max++赋值后自加
                    else if (i<3*n-3) arr[arr.length-1-count][(j--)+count]=++max;
                    else if (i<4*n-4) arr[arr.length-1-(j++)-count][0+count]=++max;                        
                    }        
           if(n==1){
                    arr[arr.length/2][arr.length/2]=max+1 ;
            }//注意到 当y值为奇数时,会有循环到n=1的情况,需要补进数组最中间值
            count++;
            n-=2;//n=n-2外圈变内圈时长度少两个值


            }
    }

}

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马