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

来源:互联网 发布:re take 知乎 编辑:程序博客网 时间:2024/04/29 08:03
 写一方法,打印等长的二维数组,
 *  要求从1开始的自然数由方阵的最外圈向内螺旋方式地顺序排列。 如: n = 4 则打印:   
 1 2 3 4
 12 13 14 5
 11 16 15 6
 10 9 8 7
-----------------------------------------------------------------------------------------------
/* *  22、 写一方法,打印等长的二维数组, *  要求从1开始的自然数由方阵的最外圈向内螺旋方式地顺序排列。 如: n = 4 则打印:           1234 1213145 1116156 10987 */public class Test22 {//设置输出方向final static private int RIGHT = 0x001;final static private int DOWN = 0x010;final static private int LEFT = 0x011;final static private int UP = 0x100;public static void main(String[] args) {int n = 8; // 数组长度int num = 1; // 初始值int flag = RIGHT; // 初始方向int a = 0, b = 0;int[][] arr = new int[n][n];//输出逻辑while (true) {if (n % 2 == 1) {if (arr[n / 2][n / 2] != 0) {break;}} else {if (arr[n / 2][n / 2 - 1] != 0) {break;}}if (flag == RIGHT) {if (arr[a][b] == 0) {arr[a][b] = num++;b++;if (b == n) {flag = DOWN;b--;a++;continue;}} else {flag = DOWN;b--;a++;continue;}} else if (flag == DOWN) {if (arr[a][b] == 0) {arr[a][b] = num++;a++;if (a == n) {flag = LEFT;a--;b--;continue;}} else {flag = LEFT;b--;a--;continue;}} else if (flag == LEFT) {if (arr[a][b] == 0) {arr[a][b] = num++;b--;if (b == -1) {b = 0;flag = UP;a--;continue;}} else {flag = UP;a--;b++;continue;}} else if (flag == UP) {if (arr[a][b] == 0) {arr[a][b] = num++;a--;} else {flag = RIGHT;a++;b++;continue;}}}// 格式化输出int len = String.valueOf(arr[n / 2][n / 2]).length() - 1;StringBuilder sb = new StringBuilder();for (int i = 0; i < len; i++) {sb.append("0");}for (int[] arrMem : arr) {for (int i : arrMem) {String s = String.valueOf(i).replaceAll("(\\d+)", sb.toString() + "$1");System.out.print(s.replaceAll("0*(\\d{" + (len + 1) + "})", "$1")+ "    ");}System.out.println();}}}




0 0
原创粉丝点击