package cn.welldragon.test; /** * 有条蛇它长度不固定,蛇头朝北顺时针盘旋着,请打印出如下图的蛇形矩阵。 * * 9 9 9 9 9 9 9 * * 8 6 6 6 6 6 9 * * 8 6 3 3 4 7 9 * * 8 5 3 1 4 7 * * 8 5 2 2 4 7 * * 8 5 5 5 4 7 * * 8 8 8 7 7 7 */ public class SnakeArray { // 二维数组的长度,必须保证为奇数 private final static int MAX_ARRAY_LEN = 7; private final static int MAX_VALUE = 9; /** * 主调方法 * * @param args */ public static void main(String[] args) { // 新建二维数组,用于生成数组,便于以后输出。默认初始化为全0 int[][] snakeArray = new int[MAX_ARRAY_LEN][MAX_ARRAY_LEN]; // 当前蛇走到得位置 int x = MAX_ARRAY_LEN / 2; int y = MAX_ARRAY_LEN / 2; // 当前位置的值 int value = 1; int valueNum = 0; // 当前方向。0:下;1:左;2:上;3:右 int direction = 0; // 主循环 while (true) { // 递增当前值 if (valueNum == value) { valueNum = 0; value++; } // 当前位置写下当前值 if (value <= MAX_VALUE) { snakeArray[x][y] = value; valueNum++; } else { break; } // 改变方向 if (value != 1) { switch (direction) { case 0: if (x - 1 >= 0 && snakeArray[x - 1][y] == 0) { direction = (direction + 1) % 4; } break; case 1: if (y - 1 >= 0 && snakeArray[x][y - 1] == 0) { direction = (direction + 1) % 4; } break; case 2: if (x + 1 < MAX_ARRAY_LEN && snakeArray[x + 1][y] == 0) { direction = (direction + 1) % 4; } break; case 3: if (y + 1 < MAX_ARRAY_LEN && snakeArray[x][y + 1] == 0) { direction = (direction + 1) % 4; } break; default: break; } } // 按照方向移动 switch (direction) { case 0: y++; break; case 1: x--; break; case 2: y--; break; case 3: x++; break; default: break; } } // 输出 printArray(snakeArray); } /** * 打印二维数组 * * @param array * @param xMax * @param yMax */ private static void printArray(int[][] array) { for (int j = 0; j < array.length; j++) { for (int i = 0; i < array[j].length; i++) { if (array[i][j] != 0) { System.out.print(array[i][j] + " "); } } System.out.println(); } } }