if, if else조건문
조건문은 조건식과 문장을 포함하는 블록{}으로 구성되어 있으며,
조건식의 연산 결과에 따라 실행할 문장이 달라져서 프로그램의 실행 흐름을 변경할 수 있다.
주로 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(그 외)}