1. 반복문
1) 중첩반복문
: 반복문 안에 새로운 반복문이 들어가 있는 형태 (for 문안에 for문이 또 들어가 있는 형태)
그렇다면 예제를 보자
for 중첩을 배운다면 가장 많이 보는 구구단 만들기
public void ex18() {
for(int dan = 2 ; dan <=9 ;dan++) {
for(int i =1 ;i <=9 ;i++) {
System.out.printf("%d x %d =%2d\t",dan,i,dan*i);
}
System.out.println();
}
}
쉽게 이해하자면,
1번째 for문은 몇 바퀴를 돌릴건지 생각하면된다.
구구단은 2단부터 9단까지 있다.
즉 2 ~ 9번 반복이 된다.
2번째 for문은 몇번 출력할지 생각하면 된다.
구구단은 곱해지는 수는 1~ 9까지 있으니 9번 반복하고 출력한다.
2단 X 1 =1
2단 X 2 =4
˙
˙
2단 X 9 =18
② 문제1
//구구단 역순 출력
//9~2단까지 곱해지는 수1~9까지는 정방향
// 나의 오답
public void ex19() {
for(int dan = 9 ; dan <=9 ;dan--) {
for(int i = 1 ;i <=9 ;i++) {
System.out.printf("%d x %d =%2d\t",dan,i,dan*i);
}
System.out.println();
}
}
ㄴ 내가 쓴 오답으로 실행하게 되면 계속 반복을 하다가 노트북이 다운 될 것이다.
이유는 //for(int dan = 9 ; dan <=9 ;dan--) 이부분 때문이다.
단순하게 구구단 역순이고 단이 9보다 작아야하니 1씩 감소 한다고 썼지만,
이렇게 쓰면 음수까지 포함하기 때문에 이렇게 작성하면 무한루프가 될 것 이다.
그러니 아래와 같이 2보다 크거나 같다라고 조건을 걸어줘야한다.
//정답
public void ex19() {
for(int dan = 9 ; dan >=2 ;dan--) {
for(int i = 1 ;i <=9 ;i++) {
System.out.printf("%d x %d =%2d\t",dan,i,dan*i);
}
System.out.println();
}
}
②문제2
//2중 for문을 이용하여 다음 모양을 출력하세요
//4321
//321
//21
//1
ㄴ 4번 반복을 하고 출력한 수는 1씩 감소하고 있다.
//나의 오답
public void ex23() {
for(int i = 4 ; i<=4 ; i--) {
for(int x = 4 ; x <=4 ;x--) {
System.out.println(x);
}
}
}
ㄴ 문제 1번과 같이 무한루프가 도는 식을 만들었다.
i <= 4 작고 1씩 감소하게 되며 이렇게 쓰면 음수까지 포함하기 때문에 이렇게 작성하면 무한루프가 될 것 이다.
그 다음 작성한 오답은 아래와 같다.
public void ex23() {
for(int i = 4 ; i>=1 ; i--) {
for(int x = 4 ; x >=1 ;x--) {
System.out.print(x);
}
System.out.println();
}
}
콘솔창
// 4321
// 4321
// 4321
// 4321
이렇게 작성하면 4321 4번 찍히는 이유는
첫번째 4321이 반복되고 첫번째 for으로 간다.
2번째 for문이 x= 4 초기화되어 있기에 다시 4321이 찍힌다.
이걸 해결하기 위해서 살펴보면 i는 계속 4 > 3 > 2 > 1으로 되는걸 알 수 있다.
그렇다면 우리는 i를 이용하여 아래와 같이 만들면 된다.
//정답
public void ex23() {
for(int i = 4 ; i>=1 ; i--) {
for(int x = i ; x >=1 ;x--) {
System.out.print(x);
}
System.out.println();
}
}
2) break문
ㄴbreak를 만다면 즉시 종료 한다.
2. while문
ㄴ 별도의 초기식, 증감식이 존재하지 않는다.
(for문과 다르게 언제 반복이 끝날지 모르며 반복 조건이 false가 되는 경우 반복 종료 한다.)
ex. 오늘 나 ! 스쿼트 지쳐 쓰러질때까지 할거야!
[작성법]
while(조건식){
조건식이 true 일때 반복 수행할 구문
}
그렇다면 예제를 보자.
//입력되는 모든 정수의 합 구하기
ㄴ합계를 구해야하니 합계를 담을 변수가 필요하다.
ㄴ입력해야니 입력한 값을 담을 변수가 필요하다.
//단 0작성하면 결과출력
public void ex26() {
Scanner sc = new Scanner(System.in);
int sum = 0;
int input =1;
while(input !=0) {
System.out.print("정수입력 :");
input = sc.nextInt();
sum+=input;
}
System.out.println("합계 :" +sum);
}
'ON > JAVA' 카테고리의 다른 글
8일차_배열 (0) | 2023.04.25 |
---|---|
7일차 _ 배열 (0) | 2023.04.24 |
1주차_지금까지 이해하지 못한 것 개념이 확실하지 않는 것에 대해서 정리 (0) | 2023.04.21 |
5일차_반복문 (1) | 2023.04.20 |
04일차_ 연산자/ if문 / switch 문을 배우다 . (0) | 2023.04.19 |