螺旋打印整数
今天要给学生讲二维数组,搜了一下,没什么好的示例,找到一个练习如下:
写一方法,打印等长的二维数组,要求从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(); } }

浙公网安备 33010602011771号