티스토리 뷰

제어문 : 프로그램의 실행 흐름을 제어하는 문장을 제어문이라고 한다. 프로그램의 실행 흐름은 메소드 블록 { } 안에서 작성한 순서대로 실행된다. 개발자가 원하는 방향으로 실행의 흐름을 바꾸는 것이 제어문이다. 제어문은 조건문, 반복문, 분기문으로 나뉜다.

 

조건문 : 조건식을 제시하고 조건식의 결과에 따라 다음 코드의 수행 여부를 결정하는 문장이다. 조건식은 반드시 true / false 의 결과가 나오게 작성하여야 한다. 조건문에는 if문과 switch문 이 있다. 

 

switch문 : switch문은 if문과 다르게 값에 따라 준비된 구문이 수행되게 하는 구조를 가진 조건 선택문이다. if문의 조건식과 다르게 값이 무엇인지를 묻는 계산식이나 변수를 제시하여 case문의 값을 비교하여 실행할 문장을 선택 결정한다. case문에 제시되는 값은 정수형 데이터, 문자형 데이터, 문자열 값만 사용된다.

switch(선택표현식)	{
	case 값1:
		//조건식의 결과가 값1과 같을 경우 수행되는 문장들
	    break;
	case 값2:
		//조건식의 결과가 값2과 같을 경우 수행되는 문장들
	    break;
	case ...:
	    break;
	default:
		//조건식의 결과와 일치하는 case가 없을 경우 수행되는 문장들
}

 

switch문에서 break 문은 각 case문의 영역을 구분하는 역할을 하며, break문을 생략하면 case문 사이의 구분이 없어지므로 다음 break 문을 만나거나 switch 문의 블록 { } 의 끝을 만날 때까지 다른 case에서 수행될 모든 문장을 수행하면서 내려간다. 이러한 fall throught 현상을 이용하여 일부러 break 문을 사용하지 않고 switch 문을 작성하는 경우도 있으나, 일반적으로 case 문에서는 반드시 실행구문 마지막에 break 문을 넣어주어야 한다.

 

다음 코드를 통해 switch 문을 사용한 예시를 보도록 하겠습니다.

package com.test01;

public class MTest01 {

	public static void main(String[] args) {
		prn01();
		prn02();
		prn03();
	}
	

	public static void prn03() {
		char c = 'b';
		
		switch(c) {
		case 'a':
			System.out.println("a 입니다.");
			break;
		case 'b':
			System.out.println("b 입니다.");
			break;
		case 'c':
			System.out.println("c 입니다.");
			break;
		}
	}
	
	private static void prn02() {
		
		switch(6/2) {
		case 1:
		case 3:
			System.out.println("홀수 입니다.");
			break;
		case 2:
		case 4:
			System.out.println("짝수 입니다.");
			break;
		}
		
	}

	public static void prn01() {
		//switch : 해당 case 로 jumping 후 fall through
		int i = 7;
		switch(i) {
		case 1: 
			System.out.println("1 입니다.");
			break;
		case 2:
			System.out.println("2 입니다.");
			break;
		case 3:
			System.out.println("3 입니다.");
			break;
		case 4:
			System.out.println("4 입니다.");
			break;
		default :
			System.out.println("default");
			break;
		}	
	}
}
package com.test01;

public class MTest02 {

	public static void main(String[] args) {
		// java 1.7 이후
		String s = "한국";

		switch (s) {
		case "한국":
			System.out.println("korea");
			break;
		case "중국":
			System.out.println("china");
			break;
		case "일본":
			System.out.println("japan");
			break;
		default:
			System.out.println("다른 나라 입니다.");
			break;
		}
	}
}

 

예제 1)

package com.test02;

public class MTest {

	public static void main(String[] args) {
		// Season class를 만들자.
		// 어디서나 접근 가능, static 영역에 생성되고,
		// int 형 파라미터 하나 받아서 String 값을 리턴하는
		// getSeason 이라는 메서드를 만들자.
		// getSeason 메서드 안에서는, 파라미터로 받은 숫자가
		// 12, 1,  2 라면 "겨울"
		// 3,  4,  5 라면 "봄"
		// 6,  7,  8 라면 "여름"
		// 9,  10, 11 라면 "가을"
		// 을 리턴하도록 명령문을 작성하자

		String res = Season.getSeason(3);
		System.out.println(res);
	}
}

정답 코드 : 

package com.test02;

public class Season {

	public static String getSeason(int i) {
		String str = "";
		
		switch(i) {
		case 12:
		case 1:
		case 2:
			return "겨울";
		case 3:
		case 4:
		case 5:
			return "겨울";
		case 6:
		case 7:
		case 8:
			return "겨울";
		case 9:
		case 10:
		case 11:
			return "겨울";
		default:
			return "해당 월은 존재하지 않습니다!";
		}
		
	}
	
}

예제 2)

package com.test03;

public class MTest {

	public static void main(String[] args) {
		/*
		 * score 클래스를 완성하자.
		 * getAvg 메서드는 국어 영어 수학 점수를 전달하면 평균을 리턴해준다.
		 * getGrade 메서드는 평균을 전달하면
		 * 90~100 : A
		 * 80~89 : B
		 * 70~79 : c
		 * 60~69 : d
		 * 0~59 : f
		 * 를 리턴해 준다.
		 * 
		 * "ㅁㅁㅁ"평균은 xx.xx점 이고, 등급은 'ㅌ' 입니다" 라고 출력!
		 */
		
		
		Score score = new Score();
		
		double avg = score.getAvg(80, 81, 99);
		String grade = score.getGrade(avg);
		
		System.out.println("조현준 평균은 " + String.format("%.2f", avg) + "점 이고, 등급은 " + grade + " 입니다.");
	}
}

정답 코드 : 

package com.test03;

public class Score {

	public double getAvg(int kor, int eng, int math) {
		return ((double)kor + (double)eng + (double)math)/3;
		//return (kor + eng + math)/3.0;
		//return (double)(kor + eng + math)/3;
	}
	
	public String getGrade(double avg) {
		String str = "";

		switch((int)avg / 10) {
		case 10: 
		case 9:
			str = "A";
			break;
		case 8:
			str = "B";
			break;
		case 7:
			str = "C";
			break;
		case 6:
			str = "D";
			break;
		default:
			str = "F";
			break;
		}
		return str;
	}
}
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함