본문 바로가기
멀티캠퍼스 풀스택 과정/Java의 정석

자바의 정석1-6 반복문

by 이쟝 2021. 12. 29.

조건문과 반복문

조건문: 조건을 만족할 때만 { }를 수행(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);
}

 

<while문에서 break와 continue 메뉴 선택 프로그램>

 

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 }