随笔 - 30, 文章 - 0, 评论 - 27, 引用 - 0
数据加载中……

java打印螺旋方阵

第一种办法
 1import java.text.DecimalFormat;
 2
 3public class HelixMatrix {
 4    private int[][] array;
 5    private int m,n;
 6    public HelixMatrix(int m, int n) {
 7        this.m = m;
 8        this.n = n;
 9        array = new int[m][];
10        for(int i = 0; i < m; i++)
11            array[i] = new int[n];
12    }

13
14    private void fill() {
15        int count = m * n;
16        int direct = 0;
17        int round = 1;
18        for(int index = 1, x = 0, y = 0; index <= count; index++{
19            array[x][y] = index;
20            switch(direct) {
21                case 0//向右
22                    if(y < n - round)
23                        y++;
24                    else {
25                        direct = 1;
26                        x++;
27                    }

28                    break;
29                case 1:
30                    if(x < m - round)
31                        x++;
32                    else {
33                        direct = 2;
34                        y--;
35                    }

36                    break;
37                case 2:
38                    if(y >= round)
39                        y--;
40                    else {
41                        direct = 3;
42                        x--;
43                    }

44                    break;
45                case 3:
46                    if(x > round)
47                        x--;
48                    else {
49                        direct = 0;
50                        round++;
51                        y++;
52                    }

53                    break;                        
54            }

55        }

56    }

57
58    private void printMatrix() {
59        DecimalFormat df = new DecimalFormat(" 000");
60        for(int i = 0; i < m; i++{
61            for(int j = 0; j < n; j++)
62                System.out.print(df.format(array[i][j]));
63            System.out.println();
64        }

65    }

66    
67    public static void main(String[] args) {
68        HelixMatrix matrix = new HelixMatrix(8,6);
69        matrix.fill();
70        matrix.printMatrix();
71    }

72}

第二种办法
 1public class ScrewSquare {
 2
 3    public static void main(String[] args) {
 4        int w = 5;
 5        int h = 5;
 6        int[][] array = new int[w][h];
 7        fill(array, 00, w-1, h-11);
 8        for (int y=0; y<h; y++{
 9            for (int x=0; x<w; x++{
10                System.out.printf("%2d ", array[x][y]);
11            }

12            System.out.println();
13        }

14    }

15
16    public static void fill(int[][] array, int left, int top, int right, int bottom, int start) {
17        if (left > right || top > bottom) return;
18
19        for (int x=left; x<=right; x++)
20            array[x][top] = start++;
21
22        for (int y=top+1; y<=bottom; y++)
23            array[right][y] = start++;
24
25        for (int x=right-1; x>=left; x--)
26            array[x][bottom] = start++;
27
28        for (int y=bottom-1; y>=top+1; y--)
29            array[left][y] = start++;
30
31        fill(array, left+1, top+1, right-1, bottom-1, start);
32    }

33}

posted on 2008-01-17 21:38 石业海 阅读(778) 评论(0)  编辑  收藏 所属分类: 收集类


只有注册用户登录后才能发表评论。


网站导航: