ByeongSuAhn 2021. 7. 14. 07:52

조건문은 조건식과 문장을 포함하는 블록{}으로 구성되어 있으며,

조건식의 연산 결과에 따라 실행할 문장이 달라져서 프로그램의 실행 흐름을 변경할 수 있다.

주로 if문이 많이 사용된다.

처리할 경우의 수가 많을 때는 if문보다 switch문이 효율적이다.

 

if문

if문의 조건식이 참(true)이면 괄호{} 안의 문장들을 수행한다.

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

 

if문에 사용되는 조건식은 일반적으로 비교연산자와 논리 연산자로 구성된다. 

비교 연산자와 논리 연산자는 값이 boolean 타입으로 나온다.

 

if문에 들어가는 조건식

	public static void main(String[] args) {
		int x = 0;
		System.out.printf("x=%d 일 때, 참인 것은%n", x);

		if (x == 0)
			System.out.println("x==0");
		if (x != 0)
			System.out.println("x!=0"); // f
		if (!(x == 0))
			System.out.println("!(x==0)"); // f
		if (!(x != 0))
			System.out.println("!(x!=0)");
            }
     }
x=0 일 때, 참인 것은
x==0
!(x!=0)

if (x != 0)이 조건으로 들어간 식과 if (!(x == 0))이 조건으로 들어간 식은 실행이 안 되는 것을 확인할 수 있다.

 

블록{ }

{ }를 이용해서 여러 가지 문장을 하나의 단위로 묶을 수 있으며, if의 조건문이 참일 때 같이 실행이 된다.

if(score > 60) 
블럭의 시작{
	System.out.printlm("합격입니다.");
	System.out.printlm("축하드립니다.");
	} if문 블럭의 끝
합격입니다.
축하드립니다.

만약 블럭{ }이 없었다면 합격입니다. 만 if문에 의해 출력이 되고 축하드립니다는 블록을 벗어날 것이다.

블록이 없다면 score의 점수가 60이 안됬을 때 그냥 축하드립니다만 출력이 된다.

합격점수가 안됐는데 축하한다니 인성에 의문을 가지게 되는 코드가 되는 것이다.

 

if-else문

if-else문은 if문에 else가 추가된 것이다.

if (조건식) {
	조건식이 참(true)일 때 수행될 문장들을 적는다.
    } else {
    조건식이 거짓(false)일 때 수행될 문장들을 적는다.
    }

if-else는 if문을 두 개 써야 하는 것보다 조금 더 쉽게 접근할 수 있게 한다.

익숙해지면 if문을 두 개 쓰는 것보다 if else문이 더 보기 편해진다.

 

if-else if문

if-else문은 두 가지 경우 중 하나가 수행되는 구조인데, 처리해야 할 경우의 수가 셋 이상인 경우에는 if를 더 붙여서 쓰면 된다.

if (조건식1) {
	//조건식1의 연산결과가 참일 때 수행될 문장들을 적는다.
} else if (조건식2) {
	//조건식2의 연산결과가 참일 때 수행될 문장들을 적는다.
} else if (조건식3) {
	//조건식3의 연산결과가 참일 때 수행될 문장들을 적는다.
} else {
	//어느 조건도 만족하지 않을 때 수행될 문장들을 적는다.
}

 

결과가 참인 조건식을 만날 때까지 코드를 실행한다.

참인 조건식을 만나면 해당 블록{}을 수행한다.

if-else if문 전체를 빠져나온다.

 

public class FlowEx04 {
	public static void main(String[] args) {
		int score = 0;
		char grade = ' ';

		System.out.print("점수를 입력하세요.>");
		Scanner scanner = new Scanner(System.in);
		score = scanner.nextInt();

		if (score >= 90) {
			grade = 'A';
		} else if (score >= 80) {
			grade = 'B';
		} else if (score >= 70) {
			grade = 'C';
		} else {
			grade = 'D';
		}


		System.out.println("당신의 학점은 "+ grade +"입니다.");
		scanner.close();
	}
}
점수를 입력하세요.>90
당신의 학점은 A입니다.

중첩 if문

if문의 블럭 내에 또 다른 if문을 포함시키는 것이 가능한데 이것을 중첩 if문이라고 부르며 중첩의 횟수에는 거의 제한이 없다.

 

public class FlowEx05 {
	public static void main(String[] args) {
		int score = 0;
		char grade = ' ', opt = '0';

		System.out.print("점수를 입력해주세요.>");

		Scanner scanner = new Scanner(System.in);
		score = scanner.nextInt();

		System.out.printf("당신의 점수는 %d입니다.%n", score);

		if (score >= 90) {
			grade = 'A';
			if (score >= 98) {
				opt = '+';
			} else if (score < 94) {
				opt = '-';
			}
		} else if (score >= 80) {
			grade = 'B';
			if (score >= 88) {
				opt = '-';
			}
		} else {
			grade = 'C';
		}
		System.out.printf("당신의 학점은 %c%c입니다.%n", grade, opt);
		scanner.close();
	}
}
점수를 입력해주세요.>88
당신의 점수는 88입니다.
당신의 학점은 B-입니다.

위의 예제는 모두 3개의 if문으로 이루어져 있으며 중첩 if문이다.

if(학점 입력) { if(90점 이상일 시) else if (80점 이상일 시) else(그 외)}