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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© zhangpanqin 中级黑马   /  2016-11-22 20:29  /  1133 人查看  /  3 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

//写一方法,打印等长的二维数组,
//要求从1开始的自然数由方阵的最外圈向内螺旋方式地顺序排列。 如: n = 4 则打印:
————————————————————————————————————————————————————————————
package com.itheima;
import java.util.Scanner;
public class Test8 {
        public static void main(String[] args) {
                // 提示输出等长的二维数组
                System.out.println("请输入要打印的等长二维数组长度:");
                // 键盘录入一个整数
                int num = new Scanner(System.in).nextInt();
                // 定义一个二维数组,接收getShuZhu方法返回的二维数组
                int[][] arr = getShuZhu(num);
                // 遍历数组
                print(num, arr);
        }

        // 遍历数组
        public static void print(int num, int[][] arr) {
                for (int i = 0; i < num; i++) {
                        int count = 0;
                        for (int j = 0; j < num; j++) {
                                System.out.print(arr[j] + "\t");
                                count++;
                                if (count % num == 0) {
                                        System.out.println();
                                }
                        }
                }
        }

        public static int[][] getShuZhu(int num) {
                int count = 1;
                int[][] arr = new int[num][num];
                // 定义变量记录二维数组未填充的上边界
                int sbj = 0;
                // 定义变量记录二维数组未填充的下边界
                int xbj = num - 1;
                // 定义变量记录二维数组未填充的左边界
                int zbj = 0;
                // 定义变量记录二维数组未填充的右边界
                int ybj = num - 1;
                while (sbj <= xbj) {
                        // 在上边界 从左边界到右边界添加元素
                        for (int i = zbj; i <= ybj; i++) {
                                arr[sbj] = count;
                                count++;
                        }
                        // 上边界元素添加完毕,上边界+1
                        sbj++;
                        // 在右边界,从上边界到下边界,添加元素
                        for (int i = sbj; i <= xbj; i++) {
                                arr[ybj] = count;
                                count++;
                        }
                        // 右边界元素添加完毕,右边界-1
                        ybj--;
                        // 在下边界,从右边界到左边界,添加元素
                        for (int i = ybj; i >= zbj; i--) {
                                arr[xbj] = count;
                                count++;
                        }
                        // 下边界元素添加完毕,下边界-1
                        xbj--;
                        // 在左边界,从下边界到上边界添加元素
                        for (int i = xbj; i >= sbj; i--) {
                                arr[zbj] = count;
                                count++;
                        }
                        // 左边界元素添加完毕,左边界+1
                        zbj++;
                }
                // 返回二维数组
                return arr;
        }
}


QQ截图20161122202846.png (916 Bytes, 下载次数: 9)

QQ截图20161122202846.png

3 个回复

倒序浏览
这不是所有的吧
回复 使用道具 举报
回复 使用道具 举报
杨森的安卓路 发表于 2016-11-25 08:27
就业班入学考试题吗

不是社招的题目
来自宇宙超级黑马专属安卓客户端来自宇宙超级黑马专属安卓客户端
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马