黑马程序员技术交流社区

标题: 打印等长的二维数组,要求从1开始的自然数由方阵的最外圈向内螺旋方式地顺序排列 [打印本页]

作者: yxx    时间: 2014-5-30 00:36
标题: 打印等长的二维数组,要求从1开始的自然数由方阵的最外圈向内螺旋方式地顺序排列
写一方法,打印等长的二维数组,要求从1开始的自然数由方阵的最外圈向内螺旋方式地顺序排列。 如: n = 4 则打印:  

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


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

作者: 饥渴ing    时间: 2014-5-30 02:37
        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有限勿喷
作者: shi980088    时间: 2014-5-30 07:06
楼上的赞一个
作者: Dark_Horse    时间: 2014-5-30 09:02
学习学习
作者: 侯金龙    时间: 2014-5-30 10:37
老师好像没讲过,学习一下
作者: yxx    时间: 2014-5-30 12:34
饥渴ing 发表于 2014-5-30 02:37
public static int[][] test(int n) {
                int[][] t2 = new int[n][n];
                boolean left = true;// true从左 ...

谢谢哈~~~~~赞:)
作者: 沐阳6011    时间: 2014-5-30 17:47
二楼不错啊,我也试试自己写写。
作者: 明日辉煌    时间: 2014-5-30 20:53
哈哈哈哈哈
作者: 小柴    时间: 2014-5-30 21:15
厉害,我可真不会
作者: yxx    时间: 2014-5-31 01:00
小柴 发表于 2014-5-30 21:15
厉害,我可真不会

。。。彼此,。我也没弄出来~~




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