螺旋打印整数

 今天要给学生讲二维数组,搜了一下,没什么好的示例,找到一个练习如下:
写一方法,打印等长的二维数组,要求从1开始的自然数由方阵的最外圈向内螺旋方式地顺序排列。
 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 

看到这个题目,有种想吐的感觉,这个东西实际意义又有多大,本想找个答案,可是,看了一下,网上的各见解都要看半天,你要先理解别人的逻辑,然后再根据别人的思路去看代码,呵呵,不如自己写一下。仅供参考,个人感觉我的代码还是比较直观。

// 打印螺旋数字
    public static void spiralNumber2() {
        System.out.println("请输入打印的行数:");
        int num = Integer.parseInt(input.nextLine());
        int[][] as = new int[num][num];//创建二维数组
        boolean h = true;//true : 横向      false: 竖向
        boolean s = true;// 顺序:true :正【左到右  上到下】  false: 反
        int i = 0, k = -1;// 坐标
        for (int m = 1; m <= num * num; m++) {
            if (h) {// 横向
                if (s) {// 正向 --》
                    if (i == num)
                        i = num - 1;
                    as[i][++k] = m;
                    if (k == num-i-1) {//右拐
                        h = false;
                    }
                } else {//
                    if (i == num)
                        i = num - 1;
                    as[i][--k] = m;// <--
                    if (k == num-i-1) {
                        h = false;
                        s = false;
                    }
                }
            } else {// 竖向
                if (s) {// 正向 上到下
                    if(k==num)
                    k = num - 1;
                    as[++i][k] = m;
                    if (i == k) {//i==k时,左拐  
                        h = true;
                        s=false;
                    }
                } else {//从下到上 
                    as[--i][k] = m;
                    if (i == k+1) {//右拐
                        h = true;
                        s = true;
                    }                    
                }
            }
        }
        System.out.println("显示:");
        for (int r = 0; r < num; r++) {
            for (int o = 0; o < num; o++) {
                System.out.print(as[r][o] + "\t");
            }
            System.out.println();
        }
    }

 

posted @ 2015-04-08 14:33  阿朱007  阅读(263)  评论(0)    收藏  举报