Java - 기본기

6. 조건문과 반복문 기초&활용 (1)

TerianP 2021. 9. 27.
728x90

1. 조건문과 반복문 ⇒ 제어문 flow control statement

  • 조건문은 조건을 만족할 때만 {} 를 수행(0~1 번) 단, 조건문의 경우는 조건을 만족하지 않는다면 한번도 수행되지 않을 수 있음
  • 반복문은 조건은 만족하는 동안 {}를 수행(0~n 번)

2-1) IF 문

조건식이 참true 일때 괄호 {} 안의 문장들을 수행한다.

if(조건식){
	// 조건식이 참 true 일 때 수행될 문장
}
##################
예시
if(score > 90){
System.out.println("A 입니다");
}

2-2) 조건식의 다양한 예

조건식 조건식이 참일 조건
90 <= x && x<=100 정수 x 가 90 이상 100이하 일 때
x < 0 || x > 100 정수 x 가 0보다 작거나 100보다 클 때
x%3 == 0 && x%2!=0 정수 x가 3의 배수지만, 2의 배수는 아닐 때
ch=='y' || ch =='Y' 문자 ch가 'y' 또는 'Y'일 때
'A' <= ch && ch <='Z' 문자 ch가 대문자 일 때
str.equals("yes") 문자열 str 의 내용이 yes 일 때 단, 대소문자 구분
str.equalsIgnoreCase("yes") 문자열 str 의 내용이 yes 일 때 단, 대소문자 구분 X

 

2-3) 블럭 { }

조건식과 반복문에서 블럭 { } 의 사용은 여러 문장을 하나로 묶어주기 위한 것이다.

즉 { } 를 사용함으로써 조건식의 경우 '조건'이 되는 여러 문장을 하나로 묶어주는 위함이고, 반복문의 경우 '반복'이 필요한 여러 문장을 하나로 묶어주기 위함이다.

단! 블럭 안쪽 문장은 탭 Tab 를 사용해서 문장을 들여쓰기 해주는게 좋다.

 

3. if-else 문

둘 중 하나 - 조건식이 참일 때와 거짓일 때를 나눠서 처리하는 조건문

if(조건식){
	// 조건식 참 true
}else{
 // 조건식 거짓 false
}

4. if-else if 문

여러 개 중의 하나 - 여러 개의 조건 식을 포함한 조건 식. 결과가 참일 조건식을 만날 때까지 첫 번째 조건식부터 순서대로 조건식을 진행한다. 즉 초건식 1이 참이면 그대로 조건식 1의 문장을 수행하고, 조건식1이 거짓인 경우 다음 조건식2 , 조건식2가 거짓인 경우 조건식3 을 수행한다.

  • 이때 수행되는 조건식은 1~3 중 1개만 수행되며, 마지막 else 문의 경우 생략 가능하다.
if(조건식1){
	// 조건식 1의 연산결과가 참일 때 수행될 문장
}else if(조건식2){
	// 조건식 2의 연산결과가 참일 때 수행될 문장
}else if(조건식3){
		// 조건식 3의 연산결과가 참일 때 수행될 문장
}else{
	// 위의 어느 조건식도 만족하지 않을 때 수행될 문장
}

 

아래처럼 활용 가능

static void else_if(){
		int score = 0; // 점수 저장을 위해 변수를 0으로 초기화
		char grade = ' '; // 학점을 저장하기 위해 변수를 공백으로 초기화
		
		System.out.println("점수를 입력하세요");
		Scanner scan = new Scanner(System.in); 
		
		score = scan.nextInt(); // scanner 를 통해 정수값 score 저장
		
		if(90<=score && score <=100) { // 학점은 100 이하여야 함
			grade='A';
			System.out.println("당신의 학점은 "+grade+ " 입니다");
		}else if(80<=score && score<90) {
			grade='B';
			System.out.println("당신의 학점은 "+grade+ " 입니다");
		}else if(70<=score && score<80) {
			grade='C';
			System.out.println("당신의 학점은 "+grade+ " 입니다");
		}else if(0<=score && score<70) {
			grade='D';
			System.out.println("당신의 학점은 "+grade+ " 입니다");
		}else{ // 학점에 100을 초과하는 값 혹은 0 미만인 값이 오는 경우 아래를 출력
			System.out.println("해당 점수는 없는 점수입니다");
			System.out.println("재입력이 필요합니다");
		}
	}

 

5. 중첩 if 문 - if 문 안의 if

if 문 안에 if 문을 써넣음으로써 전체 문장을 짧게 만들거나 조건식1을 만족하는 상태에서 다른 조건을 넣을 때 사용한다.

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

아래처럼 활용 가능!!

static void else_if2() {
		int score = 0; // 점수 저장을 위해 변수를 0으로 초기화
		char grade = 'D'; // 기본 학점을 D로 넣음으로써 grade A B C 의 조건식을 만족하지 않는 경우 그냥 D가 출력되도록 함

		System.out.println("점수를 입력하세요");
		Scanner scan = new Scanner(System.in);

		score = scan.nextInt();

		if(0<=score && score <=100) { // score 가 0 이상 100 이하인 경우 아래 조건식 실행
			if(90<=score && score <=100) {
				grade='A';
			}else if(80<=score && score<90) {
				grade='B';
			}else if(70<=score && score<80) {
				grade='C';
			}
			System.out.println("당신의 학점은 "+grade+ " 입니다");
		}else { // score 가 0 미만이거나 100 초과인 경우 아래 문장 실행
			System.out.println("해당 점수는 없는 점수입니다");
		}
	}

6. switch문

  • 처리해야 하는 경우의 수가 많을때 유용한 조건문 ⇒ 경우의 수가 많을 때는 보통 if-else if 보다 switch문이 더 좋음
  • switch 문의 경우 break; 가 필수! 만약 break 가 없는 경우 break 를 만날 때까지 switch문이 계속 이어짐
switch(조건식){
case 값1:
	// 조건식의 결과가 값1과 같을 경우 수행될 문장
	break;
case 값2:
	// 조건식의 결과가 값2와 같을 경우 수행될 문장
	break;
default:
	// 조건식의 결과가 case 의 값과 일치되는 경우가 없을 때 수행될 문장

 

swtich 문 사용 + 버퍼 사용하여 입출력받기

public class Practice13 {
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); // 버퍼로 읽고 
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); // 버퍼로 쓰기
		String str = br.readLine();
		br.close();
		
		switch (str) { // str이 1을 입력받는 경우
		case "1":
			bw.write("1번 입니다!"); // 여기 출력
			//bw.flush();
			break;
		case "2": // str 이 2를 입력받는 경우
			bw.write("2번 입니다"); //  여기 출력 다만 여기는 break; 문장이 없음
			bw.newLine(); 
			//bw.flush();
		case "3":
			bw.write("3번 입니다");
		}
		bw.flush(); // bufferwriter 정리 및 초기화
		bw.close();
	}
}

2 를 입력값으로 받은 경우 break가 없기때문에 3번까지 같이 출력됨

※ if - else if 와 switch 문의 차이점

  • if 문 안의 조건식은 true 또는 false 둘 중 하나만 올 수 있다. 때문에 조건에 따른 값이 여러개인 경우 여러번 조건식을 넣어서 만들어야 하는데, switch 문 같은 경우 조건식 안에 정수 & 문자열 모두 올 수 있기 때문에 훨씬 효율적으로 문장을 짤 수 있다.

※ swtich 문의 제약 조건

  • switch 문의 조건식 결과는 정수 또는 문자열이어야 한다.
  • case문의 값은 정수 상수(문자 포함), 문자열만 가능하며, 중복되지 않아야 한다. ⇒ 변수 X
    int num, result;
    final int ONE = 1;
    
    switch(result){
    	case '1':   // 가능!, 문자 리터럴(문자 1 == 정수 49)
    	case ONE:   // 가능!, FINAL 로 정수 상수로 지정해줌
    	case "YES"  // 가능! , 문자열 리터럴 , jdk 1.7부터 허용
    	case num: // 변수는 불가능!!
    	case 1.0: // 실수는 불가능!! 정수만 가능!​

댓글