java打印螺旋方陣
第一種辦法
第二種辦法
1
import java.text.DecimalFormat;
2
3
public 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
}

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

第二種辦法
1
public 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, 0, 0, w-1, h-1, 1);
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
}

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

posted on 2008-01-17 21:38 石業海 閱讀(788) 評論(0) 編輯 收藏 所屬分類: 收集類