본문 바로가기

Java

중첩 for문을 이용하여 다이아몬드 그리기

연습삼아 반복문 예제의 스테디셀러, 다이아몬드모양 출력코드를 짜보았다.

분명 예전에 해봤던것같은데

머리가 굳어서 그런지 뭐부터 해야할지 감이 안잡혔다.

일단 모양을 잡아줄 공백넣기는 제외하고

별 갯수가 2개씩 증가하는 코드부터 짜기 시작했다.

 

 

간단한 수식 흐름조차 갈피를 잡지 못해 그림판에 직접 그려가면서 감을 잡아본다...

for (int i=1; i<6; i++) {            
     for (int j=1; j<i*2 ; j++) {
           System.out.print("*");
     }
            System.out.println("");
}
 
cs

 

겨우 완성했다...i는 총 몇줄을 출력할지(행) j는 한줄에 별을 몇개 출력할지의 기준으로 잡았다. 

하단부를 완성하기 위해서 별이 2개씩 줄어드는 코드도 추가했다.

 

for (int i=1; i<6; i++) {            
            for (int j=1; j<i*2 ; j++) {
                System.out.print("*");
            }
            System.out.println("");
        }
        
        for (int i=4; i>0; i--) {
            for (int j=1; j<i*2; j++){
                System.out.print("*");
            }
            System.out.println("");
cs

 

하단부는 증감값만 역순으로 바꿔주면 끝나기 때문에 어렵진 않았다.

이제 빈칸을 삽입해서 모양을 잡을 차례이다.

 

 

 

 

 

생각해보니 빈칸도 고정값을 삽입하는게 아니고 줄마다 빈칸값이 달라지는데

이 과정을 뒤로 미루다니 너무 안일한 생각이였다. 결국 코드를 전반적으로 수정해야 했는데

먼저 행도 고정값으로 줬던것을 변수로 지정해서 진행했다.

 

 

 

완성한것 같은데 이상하게 첫 행의 출력메소드가 스킵되었다.

한눈에 문제점을 알수가 없어 중단점 지정후 디버깅을 돌려보니

 

첫번째 반복만 스킵된 이유가 있었다.

빈칸삽입 반복문을 추가하는 과정에서 i의 초기값을 1에서 0으로 바꾸었는데

별 출력메소드쪽 반복조건문은 그대로 둬서 첫번째 변수값이 j=0, i=0이 되었던것.

결국 조건문 j < i * 2를 j < i * 2 + 1 으로 수정하니

 

 

 

드디어 상단부 완성...

 

 

 

 

'Java' 카테고리의 다른 글

같은 문제, 다른 로직  (0) 2021.10.13
vscode에서 args[]값 입출력하기  (0) 2021.10.09
개발학습일지 - 4  (0) 2021.10.05
개발학습일지 - 3  (0) 2021.10.05
개발학습일지 - 2  (0) 2021.10.05