●입력값을 받아 아래의 별을 for 문을 이용해서 만드시오
*
**
***
****
Scanner sc = new Scanner(System.in); //입력값을 받을 표준 입력 클래스 스캐너 생성
System.out.println("숫자을 입력하시오"); // 슷자를 입력하라는 명령어를 출력
int num = sc.nextInt(); // int num에 사용자가 입력한 숫자를 할당
for (int i = 0; i <= num; i++) { // i=0 부터 사용자가 입력한 num 번째까지 반복할 for 문.
for (int j = 0; j < i; j++) { // 별표를 찍는 반복문
System.out.print("*"); // i 번째 줄에 * 출력
} //j의 for 문 종료
System.out.println();//그 다음 칸으로 내려가서 별을 찍어야 하니까.
} //i의 for 문 종료
첫번째 for 문은 입력값만큼 루프를 돌리겠다 라는 뜻이고 그 안에 있는 내부 for 문은 별을 찍는 개수를 의미한다.
입력값을 num 으로 받아서 1번 for 문은 반복값이 num이하 일 때 까지 로 표기했다.
i = 0일때 , 내부 for 문은 j 가 i 보다 작을때까지만 반복한다. 따라 i 가 0 일때는 안에를 수행 하지 않고 println () 만 수행함.
i = 1 일때, 내부 for 문은 j = 0 인 경우만 한번 수행. * 한개의 별을 프린트 하게 된다.
i =2 일때, 내부 for 문은 j = 0, j = 1 인 경우를 수행 하여 ** 두개의 별을 프린트 하게 된다.
이 반복을 num에 맞게 반복한다.
●입력값을 받아 아래의 별을 for 문을 이용해서 만드시오
*
**
***
****
System.out.println("숫자을 입력하시오"); // 숫자를 입력하라는 명령어를 먼저 출력한다.
int size = sc.nextInt(); // int 타입의 size 를 입력값으로 받는다.
char ch; // 공란 생성을 위한 문자타입도 하나 생성해준다.
int i j ; // 회전의 개수를 표현 할 변수도 생성 해준다.
for (i = size; i > 0; i--) { // i는 입력 값이고, 이건 맨 끝을 기준으로 *을 늘려가는 것이기 때문에
// 마이너스는 올 수 없도록 반복값을 0보다 클 때 까지로 설정한다.
// 또한, 공백이 점점 줄어드는 것이기 때문에 i (입력값) 는 다운카운팅으로 설정하였다.
ch = ' '; // ch를 공백으로 설정 : 출력 문자를 공백으로 초기화 하는 과정.
for (j = 1; j <= size; j++) { // j는 1이고 j가 입력값 보다 작거나 같을 떄 까지 for 문을 수행한다.
if (i == j) { // 만약 i 와 j 가 같다면
ch = '*'; // 공백인 ch 에 * 대입
} // if 문을 빠져 나온다.
System.out.print(ch); // 그리고 ch에 있는 값을 를 프린트 한다
}//두번째 for 문을 빠져 나온다.
System.out.println(); // 줄바꿈
}//첫번째 for 문을 빠져 나와 다시 첫번재 for 문의 값을 비교 하고 수행 한다.
숫자를 입력을 size 로 받고 저 문제의 디자인이 공백은 줄어 가면서 *는 늘어가는 것이기 떄문에
공백을 찍는 for 문에는 -- 로 다운 카운팅을 주고 *을 생성 하는 for 문에는 ++로 증가를 시킨다.
그리고 첫 for 문 안에 있는 ch는 * 이 되어버린 ch 를 초기화 시켜주는 것이다.
저게 없으면 프로그램은 * 만 찍어 댈 것이다.
첫번째 for문 부터 뜯어보면, 입력 값 size 가 - 가 될 순 없으니 반복 값을 0보다 클때 까지만 줬다.
두번째 for문은 * 을 프린팅 할꺼라 반복 횟수는 입력값 size 만큼으로 설정 했다.
그리고 *을 찍어야 하는 경우를 설정 해야 한다.
쉽게 설명 하기 위해 3을 입력 했다고 치자.
1번째 줄을 공백 _ _ * 공백 두개에 별 1개가 필요하다. 공공별. 별은 입력한 3의 값과 같다.
그러니까 if 문을 이용하여 i 의 값과 j 의 값이 같다면 * 을 입력 한다고 조건을 주었다.
만약에, 여기서 if (size == j) 를 주면 절대 안되는데,
그 이유는 i 의 값은 첫번째 for 문을 통해 감소 되지만 입력값 size 는 줄어 들지 않는다.
if 의 조건이 맞다면, 공백 (첫번째 for 문에서 ch = ' ' ) 이던 ch를 ch = ' * ' 로 바꾼다.
그리고는 if 문을 빠져 나와 *프린팅 한다.
두번째 for 문을 한바퀴 돌았다면( 이 말은 j = 1,2,3 까지 시도 했다는 뜻) 다시 첫번째 for문으로 가서 i를 -1 시켜 2가 된 후 다시 두번째 for 문 을 한바퀴 돈다. (이 말은 j = 1,2,3 까지 시도 했다는 뜻).
또한, ch 는 첫번째 for 문에서 초기화 되지 않는 한, if 문에서 수행 된 *을 지니고 있다.
'JAVA' 카테고리의 다른 글
[JAVA] 조건문 if 와 반복문 for 를 이용한 약수, 소수 구하기 (0) | 2023.02.19 |
---|---|
[JAVA] 반복문 for 를 이용한 피라미드 별 찍기 2 (0) | 2023.02.19 |
[JAVA] 자바 제어문 : 반복문 (for) (0) | 2023.02.19 |
[JAVA] 자바 조건문 if 와 switch 차이 (0) | 2023.02.19 |
[JAVA] 자바 제어문 : 조건문(switch) (0) | 2023.02.19 |