刚才在论坛转悠看到一个朋友在问输出输出n=5的螺旋矩阵(好像以前书上说的是蛇形打印),以前刚好研究了一下 就把代码贴出来了
- class Demo {
- static int length = 5;
- static int value = 1;
- static int[][] snake = new int[length][length];
- static Direction lastDirection = Direction.Right;
- static enum Direction {
- Right, Down, Left, Up;
- }
- public static void initialArray() {
- int row = 0, col = 0;
- for (int c = 0; c < length * length; c++) {
- snake[row][col] = value;
- lastDirection = findDirection(row, col);
- switch (lastDirection) {
- case Right:
- col++;
- break;
- case Down:
- row++;
- break;
- case Left:
- col--;
- break;
- case Up:
- row--;
- break;
- default:
- System.out.println("error");
- }
- value++;
- }
- }
-
- static Direction findDirection(int row, int col) {
- Direction direction = lastDirection;
- switch (direction) {
- case Right: {
- if ((col == length - 1) || (snake[row][col + 1] != 0))
- direction = direction.Down;
- break;
- }
- case Down: {
- if ((row == length - 1) || (snake[row + 1][col] != 0))
- direction = direction.Left;
- break;
- }
- case Left: {
- if ((col == 0) || (snake[row][col - 1] != 0))
- direction = direction.Up;
- break;
- }
- case Up: {
- if (snake[row - 1][col] != 0)
- direction = direction.Right;
- break;
- }
- }
- return direction;
- }
- public static void main(String[] args) {
- initialArray();
- for (int i = 0; i < length; i++) {
- for (int j = 0; j < length; j++) {
- System.out.printf(" %2d", snake[i][j]);
- }
- System.out.println();
- }
- }
- }
复制代码 输出结果
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
|