본문 바로가기

JAVA

JAVA STUDY - CH 4 : 조건문과 반복문

조건문 - if, switch 

 

조건문은 조건식과 문장을 포함하는 블럭 { } 으로 구성.

조건문은 if문switch문이 있음.

 

if문

if (조건식){
	//조건식이 참일때 수행될 문장들을 적는다.
}

 

만일 조건식이 'true'이면 괄호 안의 문장들을 수행.

조건식은 일반적으로 비교연산자와 논리연산자로 구성.

※ 등가비교 연산자 '==' 대신 대입 연산자 '='를 사용하지 않도록 주의

조건식의 결과는 반드시 true 또는 false이어야 함.

 

if-else 문

if (조건식1) {
 	// 조건식1의 연산결과가 참일 때 수행될 문장들을 적음.
} else if (조건식2) {
	// 조건식2의 연산결과가 참일 때 수행될 문장들을 적음.
} else if (조건식3) {
	// 조건식3의 연산결과가 참일 때 수행될 문장들을 적음.
} else { // 마지막에는 주로 else블럭으로 끝나며, else블럭은 생략 가능.
 // 위의 어느 조건식도 만족하지 않을 때 수행될 문장들을 적음.
}

첫 번째 조건식부터 순서대로 평가해서 결과가 참인 조건식을 만나면 해당 블럭 { }만 수행하고, 'if-else'문 전체를 벗어남.

 

if문의 블럭 내에 또 다른 if문을 포함시키는 것이 가능함.

→ 중첩 if문

if (조건식1){
	// 조건식1의 연산결과가 true일때 수행될 문장들
    if (조건식2){
    	//조건식1과 조건식2가 모두 true일 때 수행될 문장들
    } else {
    	// 조건식1이 ture이고, 조건식2가 false일 때 수행되는 문장들
     }
 } else {
 	// 조건식1이 false일 때 수행될 문장들
}

 

switch문

 

if문과 다르게 switch문은 단 하나의 조건식으로 많은 경우의 수를 처리할 수 있음. (처리할 경우의 수가 많은 경우 if문보다 유리함.)

다만 switch문은 제약조건이 있음.

 

  1. 조건식을 계산
  2. 조건식의 결과와 일치하는 case문으로 이동
  3. 이후의 문장들을 수행
  4. break문이나 switch문의 끝을 만나면 switch문을 빠져나감
  • default문 : if문의 else와 같은 역할. 조건식의 결과와 일치하는 case문이 하나도 없는 경우 default문으로 이동함.
  • break문 : 각 case문의 영역을 구분하는 역할. ( 만일 생략하면,  일치하는 case 이후의 모든 case를 다 실행하게 됨.)

 

switch (조건식) {
	case 값1 :
    		// 조건식의 결과가 값1과 같을 경우 수행될 문장들
            break;
	case 값2 :
    		// 조건식의 결과가 값2와 같을 경우 수행될 문장들
            break; // switch 문을 벗어남.
	default :
    		// 조건식과 일치하는 case문이 없을 때 수행될 문장들
}

 

switch문의 제약조건

 

1. switch문의 조건식 결과는 정수 또는 문자열이어야 한다.

2. case문의 값은 정수 상수만 가능하며, 중복되지 않아야 한다.

 

int month = scanner.nextInt();

switch(month) {
	case 3:
    case 4:
  	case 5:
    	System.out.println("봄");
       	break;
    case 6: case 7: case 8:
    	System.out.println("여름");
        break;
    case 9: case 10: case 11:
    	System.out.println("가을");
        break;
    default:
    	System.out.println("겨울");
}

 

switch문의 중첩

if문처럼 switch문도 중첩이 가능함.

 

Scanner scanner = new Scanner(System.in)
String regNo = scanner.NextInt();
char gender = regNo.charAt(7); // 입력받은 번호의 8번째 문자를 gender에 저장.

switch(gender) {
	case '1': case '3':
    	switch(gender){
        	case '1':
            	System.out.println("2000년대 이전에 출생한 남성");
            	break;
            case '3':
            	System.out.println("2000년대 이후에 출생한 남성");
            }
            break;
	case '2': case '4':
    	switch(gender){
        	case '2':
            	System.out.println("2000년대 이전에 출생한 여성");
                break;
            case '4':
            	System.out.println("2000년대 이후에 출생한 여성");
           }
           break;
    default:
    	System.out.println("유효하지 않은 주민등록번호");
    }

 

💡charAt() 이란?

: string으로 저장된 문자열 중에서 한글자만 선택해서 char으로 변환.

String str = new String();

char c = ' ';

str = "안녕하세요";

c = str.charAt(0);

System.out.println(c);

반복문 - for, while, do-while

어떤 작업이 반복적으로 수행되게 함.

반복문의 종류 : for, while, do-while.

for문과 while문은 구조와 기능이 유사함. for문은 주로 반복횟수를 알고 있을 때 사용함.

 

for문

 

반복 횟수를 알고 있을 때 적합.

for (초기화;조건식;증감식) {
	// 조건식이 참일 때 수행될 코드
}
  • 초기화 : 반복문에 사용될 변수를 초기화하며, 처음에 한번만 실행됨.
  • 조건식 : 값이 참이면 반복을 계속, 거짓이면 반복을 중단하고 for문을 벗어남.
  • 증감식 : 반복문을 제어하는 변수의 값을 증가 또는 감소

세 가지 요소는 모두 생략가능함. 

for ( ; ; ) { . . . }

대신 블록 { }안에 if문을 넣어서 특정 조건을 만족하면 for문을 빠져나오게 해야함.

 

중첩for문

 

*****
****
***
**
*
for(int i=5;i>0;i--){
	for(int j=0;j<i;j++){
    	System.out.print("*");
    }
    System.out.println();
}

 

향상된 for문

 

JDK1.5부터 for문의 새로운 문법이 추가됨.

for ( 타입 변수명 : 배열 또는 컬렉션) {
	// 반복할 코드
}

 

int [ ] arr = {10,20,30,40,50}; 

배열 arr을 위와 같이 선언했을 때.

for (int i=0; i <arr.length;; i++){
	System.out.println(arr[i]);
}


for (int tmp : arr){
	System.out.println(tmp);
}

 

 

While 문

if문과 다르게 while문은 조건식이 '참인 동안' 블럭 { } 내의 문장을 반복.

※for문과 달리 while문의 조건식은 생략 X 

while (조건식) {
	// 조건식의 연산결과가 참인 동안, 반복될 문장들
}
  1. 조건식이 참이면 블럭 { }안으로 들어가고 거짓이면 while문을 벗어난다.
  2. 블럭 { }의 문장을 수행하고 다시 조건식으로 돌아간다.
int i = 1; //초기화
while (i<=10) { // 조건식
	System.out.println(i);
	i++ // 증감식
}

 

while(flag) { // flag의 값이 true이므로 조건식은 참
	System.out.print(">>");
    
    Scanner scanner = new Scanner(System.in)
    String tmp = scanner.nextLine();
    num = Integer.parseInt(tmp);
    
    if(num!=0){
    	sum += num;
    } else{
    	flag = false;
    }
}

while문의 조건식이 상수는 아니지만, 변수가 고정된 값을 유지하므로 무한반복문과 비슷함.

특정 조건을 만족할 때 반복을 멈추게 하는 if문이 필요함.

 

Do-while 문

 

기본적인 구조는 while문과 같으나 조건식과 블럭{ } 의 순서를 바꿔놓은 것.

while문은 조건식에 따라 블럭이 한 번도 수행되지 않을 수 있지만, do-while문은 최소한 한번은 수행될 것을 보장함.

do {
	// 조건식의 연산결과가 참일 때 수행될 코드
 } while (조건식);

 

Break 문

 

break문은 자신이 포함된 가장 가까운 반복문을 벗어남.

int sum = 0;
int i = 0;

while(true) {
	if(sum > 100) 
    	break;
    i++;
    sum += i;
} // end of while

 

 

Continue 문

 

continue문은 반복문 내에서만 사용가능.

진행 도중에 continue 문을 만나면 반복문의 끝으로 이동하여 다음 반복으로 넘어감.

반복문 전체를 벗어나지 않고 다음 반복을 계속 수행하며 전체 반복 중에서 특정조건을 만족하는 경우를 제외하고자 할 때 유용.

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