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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

写一方法,打印等长的二维数组,要求从1开始的自然数由方阵的最外圈向内螺旋方式地顺序排列。 如: n = 4 则打印:  

1     2     3     4
12  13   14    5
11  16   15    6
10   9     8     7


具体怎么实现。。。真心蒙了。。。。。。。。。。。。。。。

9 个回复

倒序浏览
        public static int[][] test(int n) {
                int[][] t2 = new int[n][n];
                boolean left = true;// true从左到右打印然后从上到下 false 从右到左 然后从下到上
                int x = 0;// x轴
                int y = 0;// y轴
                for (int i = 1; n >= 0; n--) {// i是要打印的数字
                        if (left) {//
                                // 总共要打印的数量 2n-1
                                int t = (n << 1) - 1;
                                for (int j = 0; j < t; j++) {
                                        if (j > 0)// 第一次不偏移
                                                if (j > t / 2) {
                                                        // 从上往下偏移
                                                        y++;
                                                } else {
                                                        // 从左往右偏移
                                                        x++;
                                                }
                                        t2[y][x] = i++;
                                }

                                x--;// 矫正头的位置(就是第一要打的)
                                left = !left;
                        } else {

                                int t = (n << 1) - 1;
                                for (int j = 0; j < t; j++) {
                                        if (j > 0)
                                                if (j > t / 2) {
                                                        // 从下往上
                                                        y--;
                                                } else {
                                                        // 从右向左
                                                        x--;
                                                }
                                        t2[y][x] = i++;
                                }
                                x++;// 矫正打印位置
                                left = !left;
                        }
                }
                System.out.println();
                for (int i = 0; i < t2.length; i++) {
                        for (int j = 0; j < t2[i].length; j++) {
                                System.out.printf("%4d", t2[i][j]);
                        }
                        System.out.println();
                }
                return t2;
        }
这个是我自己写的,IQ有限勿喷

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1 赞一个!

查看全部评分

回复 使用道具 举报
楼上的赞一个
回复 使用道具 举报
学习学习
回复 使用道具 举报
老师好像没讲过,学习一下
回复 使用道具 举报
饥渴ing 发表于 2014-5-30 02:37
public static int[][] test(int n) {
                int[][] t2 = new int[n][n];
                boolean left = true;// true从左 ...

谢谢哈~~~~~赞:)
回复 使用道具 举报
二楼不错啊,我也试试自己写写。
回复 使用道具 举报
哈哈哈哈哈
回复 使用道具 举报
小柴 中级黑马 2014-5-30 21:15:07
9#
厉害,我可真不会
回复 使用道具 举报
yxx 中级黑马 2014-5-31 01:00:59
10#
小柴 发表于 2014-5-30 21:15
厉害,我可真不会

。。。彼此,。我也没弄出来~~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马