날 살짝 멘붕에 빠뜨렸던, 입력값을 받아 별로 피라미드 만들기.
가보자고. ㅎ
● 입력값을 받아 아래의 별을 for 문을 이용해서 만드시오
*
***
*****
*******
Scanner sc = new Scanner(System.in); //입력 값을 받을 스캐너 생성
System.out.println("숫자을 입력하시오"); //숫자를 입력 받을 명령어 출력
int i, j; // 사용 될 변수 선언
int size = sc.nextInt(); //입력 값을 int 타입 size 로 받았다.
int m = size / 2; // 만약 7을 입력했다면 1번쨰 줄에 앞쪽 공란이 3개가 있어야 하니까 size를 2로 나눔
for (i = 0; i <= m; i++) { // 전체적인 줄 카운트 하여
for (j = 0; j < m - i; j++) { //공란을 출력하는 루프
System.out.print(' ');
} // j 가 m -1 번까지 모두 다 수행 하고 탈출
for (j = 0; j < 2 * i + 1; j++) { //*를 출력하는 루프
System.out.print("*");
} // j 가 j < 2 * i + 1 까지 다 수행 하고 탈출 해야 할 루프
System.out.println(); // 다음 칸으로 내려 갈 엔터 역할
} //엔터까지 치고 빠져 나와 다시 첫번째 for 문을 1 증가 시켜 다시 수행
이젠 변수 선언까지는 이제는 이해가 가야 한다!
int m; 은 왜 있냐면, 만약에 5을 입력 했다고 치자. 그러면 첫번째 줄은 공란이 2가 있는다. 이는 m / 2 의 값과 똑같다~
첫번째 for 문은 전체적인 그림의 아웃핏을 도는 루프문장이다.
-> 첫번째 줄(i = 0) 에는 1, 두번째 줄 (i = 1) 에는 3개 세번째 줄(i = 2)
두번쨰 for 문은 공백을 찍는 문장인데, 공백은 m - i 까지만 찍는다.
예를 들어, 5를 입력한 사용자는 공공별, 공별별별 , 별별별별별, 을 출력 해야 하니 첫번째 반복에서는 공란 두개를 무조건 출력 해야 한다.
즉, i = 0 (첫번쨰 줄) 일때, 2 - i = 2 니까, j = 0,1 두개의 공란을 생성하게 된다.
세번째 for 문은 두번째 for 문이 m - i 만큼 다 돈 후 빠져 나와 수행 하게 될 반복문이다.
2 * i + 1 을 반복조건으로 한 이유는 별이 찍힐 개수를 표현 한 것인데,
첫번째 줄(i = 0) 에는 1, 두번째 줄 (i = 1) 에는 3개 세번째 줄(i = 2) 에는 5개...
이렇게 2씩 늘어가기 떄문에 그 수식을 적용 시킬 계산은 2 * i + 1 이거 뿐이다. 세번째 for 문이 실행 될 때마다 *을 찍는다.
세번째 for 문이 끝나면 다시 첫번째 for 문으로 올라가 i 를 증가 시키고 다시 반복한다.
'JAVA' 카테고리의 다른 글
[JAVA] 조건문 if 와 반복문 for 를 이용한 피보나치 수열 구하기 (0) | 2023.02.19 |
---|---|
[JAVA] 조건문 if 와 반복문 for 를 이용한 약수, 소수 구하기 (0) | 2023.02.19 |
[JAVA] 반복문 for을 이용한 피라미드 별 찍기 (0) | 2023.02.19 |
[JAVA] 자바 제어문 : 반복문 (for) (0) | 2023.02.19 |
[JAVA] 자바 조건문 if 와 switch 차이 (0) | 2023.02.19 |