자바의 정석-6 반복문

자바의 정석-6 반복문

조건문과 반복문

조건문: 조건을 만족할 때만 { }를 수행(0~1번) – if와 switch

반복문: 조건을 만족하는 동안 { }를 수행(0~n번) – for와 while

조건문과 반복문은 실행 흐름을 바꿔 주기 때문에 제어문(flow control statement)라고 함

For문

조건을 만족하는 동안 블록 { }을 반복 -> 반복횟수를 알 때 적합

-> 변수의 범위는 좁을수록 좋음(넓을수록 확인해야 하는 값이 많아 지기 때문)

-> 조건식을 생략하면, true로 간주되어서 무한반복

//괄호 { }안의 문장을 10번 반복 for(int i = 1; i <= 10; i++) { System.out.println(i); } for(int i = 10; i >= 1; i--) { System.out.println(i); } for(int i = 1, j = 10; i <= 10; i++, j--) { //변수 i와 j가 같은 형이어야함 System.out.println("i= "+i+" j= "+j); //for문 안에서만 실행됨 밖에서는 xx\

중첩 for문

for문 내에 또 다른 for문을 포함시킬 수 있다.

안쪽 for문이 끝난 다음에 바깥 for문 실행

<구구단>

//구구단 코드 (2단부터 9단까지) for(int i = 2; i<=9; i++) { for(int j =1; j<=9; j++) { System.out.println(i+"x"+j+"="+i*j); } System.out.println(""); //단마다 띄어쓰기 해주는 것이라서 생략 가능 }

**********

**********

**********

**********

**********

<5x10 별찍기>

//5X10 별찍기 // for(int i=1;i<=5;i++) { // System.out.println("**********"); // } for(int i = 1; i <= 5; i++) { for(int j = 1; j <= 10; j++) { System.out.print("*"); } System.out.println(); // 줄바꿈의 용도 }

*

**

***

****

*****

<피라미드>

//피라미드 (i값과 j값이 똑같이 증가해야 함, 그래서 조건이 같음) for(int i = 0; i<=5; i++) { for(int j = 1; j <= i; j++) { System.out.print("*"); } System.out.println(); }

while문

조건을 만족시키는 동안 블럭 { }을 반복 -> 반복횟수 모를 때(for문은 반복횟수 알 때)

while (조건식) {

// 조건식의 연산결과가 참(true)일 동안, 반복된 문장들을 적는다.

}

for문은 while문과 호환 가능!

<입력한 자릿수를 더하는 프로그램 출력>

int num = 0, sum = 0; System.out.println("숫자를 입력하세요.(예:12345)"); Scanner sc = new Scanner(System.in); String tmp = sc.nextLine(); num = Integer.parseInt(tmp); // 10으로 나머지 연산을 하면 마지막 자리의 값을 얻음(56%10 == 6) while(num>0){ //num을 10으로 나눈 나머지를 sum에 더함 sum += num % 10; //sum = sum + num % 10 System.out.println("num"+num+" sum"+sum); num = num / 10; // num = num / 10; num을 10으로 나눈 값을 num에 저장 } System.out.println("각 자리수의 합: "+ sum);

do-while문

블럭 { }을 최소한 한 번 이상 반복 – 사용자 입력 받을 때 유용

do {

// 조건식의 연산결과가 참일 때 수행될 문장들을 적는다. (처음 한 번은 무조건 실행)

} while (조건식) ; -> 끝에 ‘세미콜론’을 잊지 않도록 주의

<1과 100사이의 정수를 입력받고 난수로 생성된 값을 맞추기>

int num = 0, answer = 0; answer = (int)(Math.random()*100)+1; // 1~100 사이의 난수 Scanner sc = new Scanner(System.in); do { System.out.print("1과 100사이의 정수를 입력하세요.>"); num = sc.nextInt(); if(num > answer) { System.out.println("더 작은 수로 다시 시도하세요"); } else if(num < answer) { System.out.println("더 큰 수로 다시 시도하세요"); } } while(num!=answer); //answer와 num가 같지 않을 때 수행될 문장들 System.out.println("정답입니다.");

-> while로 바꿀 수 없는 이유는 코드 중복이 발생하기 때문에!

break문

자신이 포함된 하나의 반복문을 벗어난다.

<100이 될때까지의 합을 구하기(break문을 사용해서>

int i = 0, sum = 0; while(true) { //무한 반복문 for(;;) { } / while문에서 조건식은 생략불가 if(sum > 100) break; ++i; sum += i; } //end of while System.out.println("i=" + i); System.out.println("sum=" + sum);

continue문

자신이 포함된 반복문의 끝으로 이동 – 다음 반복으로 넘어 감

전체 반복 중에서 특정 조건 시 반복을 건너뛸 때 유용

break문과 달리 반복문을 벗어나지 않는다.

<1에서 10의 숫자 중에서 2의 배수일 때 출력하지 않는 프로그램 작성>

for(int i = 0; i <= 10; i++) { if(i%2==0) continue; System.out.println(i); }

int menu = 0; Scanner sc = new Scanner(System.in); while(true) { System.out.println("(1) square"); System.out.println("(2) square root"); System.out.println("(3) log"); System.out.print("원하는 메뉴(1~2)를 선택하세요.(종료:0)>"); String tmp = sc.nextLine(); menu = Integer.parseInt(tmp); if(menu==0) { System.out.println("프로그램을 종료합니다."); break; } else if(!(1 <= menu && menu <= 3)) { System.out.println("메뉴를 잘못 선택하셨습니다.(종료는 0)"); continue; } System.out.println("선택하신 메뉴는 " + menu+ "번 입니다."); } sc.close();

이름붙은 반복문

여러 반복문이 중첩되어 있을 때 반복문에 이름을 붙여서 하나 이상의 반복문을 벗어날 수 있다.

Loop1 : for(int i=2; i<=9; i++){ for(int j=1; j<=9; j++){ if(j==5) break Loop1; //바깥쪽 for문 만 빠져나옴 //break; //안쪽 for문만 빠져나오고 안쪽은 계속 돌아감 //continue Loop1; //continue; System.out.println(i+"*"+j+"="+i*j); } // end of for i System.out.println(); System.out.println(); } // end of Loop1 }

from http://everysmallstep.tistory.com/65 by ccl(A) rewrite - 2021-12-29 01:01:30