用java语言的循环和数组如何做出回形矩阵?

解决方案 »

  1.   

    public class SpiralMatrix {    public static void main(String[] args) {        final int N = 5;        int[][] spiralMatrix = new int[N][N];
            int[] rc = { 0, 0 };
            for(int s = 0, t = N * 2 - 1, n = 1; s < t; s++) {
                int p = N - (s + 1) / 2;
                while(p-- > 0) {
                    spiralMatrix[rc[0]][rc[1]] = n++;
                    changeIndex(rc, s, p);
                }
            }
            print(spiralMatrix);
        }    private static void changeIndex(int[] rc, int turn, int p) {
            if(p == 0) {
                turn++;
            }
            rc[turn & 0x1] += 2 - (turn & 0x3 | 0x1);
        }    private static void print(int[][] matrix) {
            for(int i = 0; i < matrix.length; i++) {
                for(int j = 0; j < matrix[i].length; j++) {
                    if(j > 0) {
                        System.out.print(' ');
                    }
                    System.out.printf("%2d", matrix[i][j]);
                }
                System.out.println();
            }
        }
    }
     1 16 15 14 13
     2 17 24 23 12
     3 18 25 22 11
     4 19 20 21 10
     5  6  7  8  9
      

  2.   

        private static void changeIndex(int[] rc, int turn, int p) {
            if(p == 0) {
                turn++;
            }
            rc[turn & 0x1] += 2 - (turn & 0x3 | 0x1);
        }改成这样会更好一些:    private static void changeIndex(int[] rc, int turn, int p) {
            if(p == 0) {
                turn++;
            }
            rc[turn & 0x1] += 1 - (turn & 0x2);
        }
      

  3.   

    努力了很久,还是看不懂火龙果大大的十六进制按位于操作....
    自己写的平民版程序:
    public static int[][] createRoundArray(int n) {
    int[][] roundArray = new int[n][n];
    int[] add = { 1, 0 };
    int size = n*n;
    int x = 0;
    int y = 0;
    for (int i = 1; i <= size; i++) {
    roundArray[x][y] = i;
    int row = x + add[0];
    int column = y + add[1];
    if (row >= 0 && row < n && column >= 0 && column < n
    && roundArray[row][column] == 0) {
    x = row;
    y = column;
    } else {
    if (add[0] == 1) {
    add[0] = 0;
    add[1] = 1;
    y = y + 1;
    } else if (add[1] == 1) {
    add[0] = -1;
    add[1] = 0;
    x = x - 1;
    } else if (add[0] == -1) {
    add[0] = 0;
    add[1] = -1;
    y = y - 1;
    } else if (add[1] == -1) {
    add[0] = 1;
    add[1] = 0;
    x = x + 1;
    }
    }
    }
    return roundArray;
    }
      

  4.   

    本人是java新手,以后有什么不懂的,希望大家多多关照 。非常以上的各位的帮助。