본문으로 바로가기

안녕하세요!! 이번에는 자바로 for문을 두개만 사용하여 입력받은 수(홀수) 크기의 다이아몬드를 만들어 보도록 하겠습니다!! - 별찍기


별찍기는 자바나 c, c++ 등 시작할때 기초문제로 많이 나오고 있는데요.


수많은 방법이있지만 저는 for문을 단 두개!! 만 사용하여 다이아몬드별을 만드는 방법을 알려드리겠습니다.

Scanner sc = new Scanner(System.in);
                                System.out.println("*****홀수입력*****");
 
                int count = sc.nextInt(); // 홀수 입력받음 ex))5를 입력(이하 5를 입력했다는 가정하에 설명)
 
                int o = count / 2; // 입력받은 홀수 나누기2 ex)) 5/2 = 2.5 이지만 정수만남아 2
 
                for (int i = -o; i <= o; i++) { // 5를 입력하였으니 -2,-1,0,1,2 총 5번 돌게 되어있다.
                    int k = 0; // 비교하기위해 k를 선언, 이중포문 탈출뒤 초기화;
                    for (int j = 0; j < count - Math.abs(i); j++) { // Math.abs(a) 함수는 a를 절대값으로 인식한다 예를들어 -2일 경우 2로인식 /////따라서 이 포문은 3,4,5,4,3 번 돌게 되어있다.
                    // 첫바퀴는 j = 0; j < 3 ; j ++ 인 샘이다.
                        String result = k < Math.abs(i) ? " " : "*"; // 공백과 별을 구분하기위해 삼항연산자를 사용 비교자 k 가 절대값i보다 작으면 공백 크면 별을 찍어주는 공식. // 삼항연산자 숙지 >> 조건식 ? 조건이참일떄 : 조건이 거짓일때
                        System.out.print(result);
                        k++; // 한번돌때마다 k 를 증가시켜준다. 공백을 찍은걸 체크, Math.abs(i) 는 한줄의 공백의 갯수도 되는데 k가 공백의 갯수보다 더 찍혓으면 result 가 false 가 되어 *을찍게된다
                    }
                    System.out.println();
                }

(주석이 많아서 그렇지 실제코드길이는 짧습니다 ㅠㅠ)

라인별로 자세한 설명은 주석으로 모두 달아놓았습니다.


결과는

이런식으로 나옵니다.


이상으로 for문을 두개만 사용하여 홀수개의 수를 입력하면 그만한 크기의 별을 출력하는 예제를 보았습니다.


다이아몬드의 뒷 공백은 생각하지 않아도 되기때문에 한 행의 공백수와 별의 갯수를 알고 바로바로 찍어주는 방법을 사용하였는데요.

그러기위해선 삼항연산자(조건문 ? 참일경우 : 거짓일경우)를 사용하여 행마다 공백의 수와 별의수를 조건문으로 걸러내어 찍어주는방법입니다.


자세한 설명은 주석을 참고해주세요.


핵심은 Math.abs 함수(절대값) 과 삼항연산자인거 같습니다.

'Java' 카테고리의 다른 글

[자바]쓰레드(Thread)  (0) 2017.08.10
[자바](AWT)+member/anonymous innerClass  (1) 2017.08.10
[자바](AWT)간단한 구조  (0) 2017.08.10
[자바]String값 기본  (0) 2017.08.09
[자바]생성자 This 활용하기  (0) 2017.08.07