포스팅 OS : Mac

검색어 : 자바(Java), 배열(Array), 별(Star)




오늘은 자바 기초 공부를 위해 배열을 사용해 입력받은 정수에 따라 점점 커지는 별 그리는 방법에 대해 포스팅합니다.


요즘 일이 바빠서 블로그에 관심을 가지지 못했습니다 ㅠ

그래도 짬짬히 올려보도록 하겠습니다.


그럼 소스를 보도록 하죠.

1
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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
import java.util.Scanner;
 
public class Star {
 
    public static void main(String[] args) {
        /* 별 그리기 - 다리 5개 */
        
        System.out.println("숫자를 입력해주세요.");
        Scanner input = new Scanner(System.in);
        
        int answer;                    // 입력받은 정수
        int heigt;                     // 별 세로 길이
        int width;                     // 별 가로 길이
        int center;                    // 가로 중간 지점
        int top;                       // 머리 종료 지점
        int middle;                    // 몸통 종료 지점
        int bottom;                    // 다리 종료 지점
        
        // 입력받은 정수 저장
        answer = input.nextInt();
        
        // 별 세로 길이 생성
        heigt = answer * 9;
        
        // 별 가로 길이 생성
        width = answer * 15;
        
        // 가로 길이가 짝수일 경우 + 1
        if(width % 2 == 0) {
            width += 1;
        }
        
        // 가로 중간 지점 생성
        center = width / 2;
        
        // 머리,몸통,다리 종료 위치 지정
        top = heigt / 3;
        middle = top * 2;
        bottom = top * 3;
        
        /*
        System.out.println("입력한 정수 = " + answer);    // 입력받은 정수
        System.out.println("총 세로 길이 = " + heigt);    // 별 세로 길이
        System.out.println("총 가로 길이 = " + width);    // 별 가로 길이
        System.out.println("가로 중간 지점 = " + center);  // 가로 중간 지점
        System.out.println("상단 = " + top);             // 상단
        System.out.println("중간 = " + middle);          // 중간
        System.out.println("하단 = " + bottom);          // 하단
        */
        
        char[][] star = new char[heigt][width]; // 별의 세로, 가로 길이로 배열 생성
        
        int start;       // 시작 지점 
        int end;         // 종료 지점
        int startBottom; // 하단 시작 지점
        int endBottom;   // 하단 종료 지점
        
        // 별 머리 생성
        start = center;
        end = center;
        for(int a = 0 ; a < top ; a++){
            for(int b = 0 ; b < width ; b++){
                if(start <= b && b <= end) {
                    star[a][b] = '*';
                }else {
                    star[a][b] = ' ';
                }
            }
            
            start--;
            end++;
        }
        
        // 별 몸통 생성
        start = 0;
        end = width - 1;
        for(int a = top ; a < middle ; a++){
            for(int b = 0 ; b < width ; b++){
                if(start <= b && b <= end) {
                    star[a][b] = '*';
                }else {
                    star[a][b] = ' ';
                }
            }
            
            start++;
            end--;
        }        
 
        // 별 다리 생성
        startBottom = center;
        endBottom = center;
        for(int a = middle ; a < bottom ; a++){
            for(int b = 0 ; b < width ; b++){
                if(startBottom <= b && b <= endBottom) {
                    star[a][b] = ' ';
                }else {
                    star[a][b] = '*';
                }
                
                if(start -1 > b || end +1 < b) {
                    star[a][b] = ' ';
                }
            }        
            
            start--;
            end++;
            startBottom -= 3;
            endBottom += 3;    
        }
        
        // 별 배열 출력
        for(int a=0 ; a < heigt ; a++){
            for(int b=0 ; b < width ; b++){
                System.out.print(star[a][b]);
            }
            System.out.println();
        }
    }
}
cs



오늘도 역시 설명은 주석으로 대체합니다.

저는 별을 머리, 몸통, 다리로 구분하여 그리는 방법을 사용했습니다. 제가 만든 별이 완벽한 별의 모양일까? 라는 의문이 들긴 하는데 좀 더 정확한 별을 그리고 싶으시다면 좀더 세세하게 셋팅하면 될 것 같네요.


위 소스를 실행하면 아래와 같이 별이 그려집니다.





다음엔 원 그리기 포스팅을 하도록 하겠습니다.


+ Recent posts