옹실이의 개발이야기

Java

Java 별찍기 : 이중 for문을 활용한 별(*) 찍기

옹실 2020. 11. 19. 19:35

for문 공부를 위해 많이들 한다는 별찍기를 복습해보았다.
이중 for문으로 행과 열을 구분해 총 4가지 모양의 별을 찍었다.

먼저 본격적인 별찍기에 앞서
준비물(?)로 String 타입의 공백 " "과 "*" 변수가 필요했다.

1
2
3
    String str1 = " ";
    String str2 = "*";
 
cs

 

1. 왼쪽으로 치우친 별 찍기(1개씩 증가)

*   
* *
* * *
* * * *

1개씩 늘어나는 별찍기는 공백을 사용하지 않아도 돼서 간단하다.

1
2
3
4
5
6
7
8
    void m1(){
        for(int i=1; i<=4; i++){ //행
            for(int j=1; j<=i; j++){ //행에 맞춰 별 찍기
                System.out.print(str2);
            }
            System.out.println(); //한 줄 찍고 줄 바꿈
        }
    }
cs

 

첫번째 int i를 활용한 for문은 아래로 내려가는 행(줄)을 표현하고
그 안에 들어가는 for문은 열을 표현한다.
행이 4개까지 1개씩 늘어남에 따라 별도 ++시킨 후 
한 줄씩 찍을때마다 System.out.println(); 으로 줄 바꿈 시켰다.

*cf) System.out.print(); 은 줄바꿈 없이 옆으로 출력,
     System.out.println(); 은 한줄씩 줄을 바꿔가면서 출력한다.

 

2. 오른쪽으로 치우친 별찍기(1개씩 증가)

오른쪽으로 치우친 별찍기는 공백을 활용해야한다.
먼저 빨간색 세모친 부분처럼 공백이 3개에서 1개로 줄어든 후
별이 1개부터 4개씩 늘어나야 한다.

1
2
3
4
5
6
7
8
9
10
11
    void m2(){ 
        for(int i=1; i<=4; i++){
            for(int j=3; j>=i; j--){ //공백 3개부터 1개씩 줄어들기
                System.out.print(str1);
            }
            for(int k=1; k<=i; k++){
                System.out.print(str2);
            }
            System.out.println();
        }
    }
cs

공백(위에서 String str1로 정의함)을 int j를 활용한 for문을 이용해 먼저 3개부터 하나씩 줄어들도록 만든 후
별을 int k를 활용해 하나씩 늘어나게 했다.

 

3. 왼쪽으로 치우친 별 찍기(1개씩 감소)

* * * *
* * *
* *
*

왼쪽으로 치우친 별찍기도 1번과 마찬가지로 공백 없이 비교적 간단하게 찍어낼 수 있다.

1
2
3
4
5
6
7
8
    void m3(){
        for(int i=1; i<=4; i++){
            for(int j=4; j>=i; j--){ //별 4개부터 1개씩 줄어들기
                System.out.print(str2);
            }
            System.out.println(); //줄바꿈
        }
    }
cs

 

별이 4개부터 1개로 줄어들어야하니
변수 j의 초기값을 4로 놓은 후  j가 i보다 클 때까지 한개씩 줄어들게 만들었다.(i는 4까지 늘어남)

 

4. 오른쪽으로 치우친 별찍기(1개씩 감소)

오른쪽으로 치우친 별찍기도 2번과 마찬가지로 공백을 활용했다.
빨간색 부분처럼 공백이 1개에서 3개로 늘어난 후
별이 4개부터 1개씩 줄어들어야 한다.

1
2
3
4
5
6
7
8
9
10
11
12
    void m4(){
        for(int i=1; i<=4; i++){
            for(int k=1; k<i; k++){ //공백 1개부터 3개까지 늘어나기
                System.out.print(str1);
            }
            for(int j=4; j>=i; j--){ //별 4개부터 1개씩 줄어들기
                System.out.print(str2);
            }
 
            System.out.println();
        }
    }
cs

 

1번부터 4번을 메인 메소드에서 호출해보니
결과값이 다음과같이 나왔다.