Java
[Java] 조건문
gorusair
2021. 12. 16. 12:13
조건문 - if, switch
if 문
if 문은 가장 기본적인 조건문이며, '만일(if) 조건식이 참(true) 이면 괄호{ } 안의 문장들을 수행하라'
if(조건식) {
// 조건식이 참 (true) 일떄 수행될 문장들을 적는다
}
if (score > 60 ) {
System.out.println("합격입니다.");
}
score > 60
80 > 60
true // 조건식이 참이므로 괄호 안의 문장이 실행된다.
package ch04;
public class FlowEx1 {
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");
if(!(x==0)) System.out.println("!(x==0)");
if(!(x!=0)) System.out.println("!(!x=0)");
x=1;
System.out.printf("x=%d 일떄, 참인 것은 %n",x);
if(x==0) System.out.println("x==0");
if(x!=0) System.out.println("x!=0");
if(!(x==0)) System.out.println("!(x==0)");
if(!(x!=0)) System.out.println("!(!x=0)");
}
}
x=0 일떄, 참인 것은
x==0
!(!x=0)
x=1 일떄, 참인 것은
x!=0
!(x==0)
package ch04;
import java.util.*;// Scanner 클래스를 사용하기 위해 추가
public class FlowEx2 {
public static void main(String[] args) {
int input;
System.out.print("숫자를 하나 입력하세요.>");
Scanner scanner = new Scanner(System.in);
String tmp = scanner.nextLine(); //화면을 통해 입력받은 내용을 tmp에 저장
input = Integer.parseInt(tmp); //입력받은 문자열(tmp)을 숫자로 변환
if(input==0) {
System.out.println("입력하신 숫자는 0입니다.");
}
if(input !=0)
System.out.println("입력하신 숫자는 0이 아닙니다.");
System.out.printf("입력하신 숫자는 %d입니다.", input);
}
}
if-else문
if(조건식) {
// 조건식이 참(true)일떄 수행될 문장들을 적는다.
} else {
// 조건식이 거짓(false)일 떄 수행될 문장들을 적는다.
}
package ch04;
import java.util.*;
public class FlowEx3 {
public static void main(String[] args) {
System.out.print("숫자를 하나 입력하세요");
Scanner scanner = new Scanner(System.in);
int input = scanner.nextInt(); //화면을 통해 입력받은 숫자를 input에 저장
if(input ==0) {
System.out.println("입력하신 숫자는 0입니다");
} else { //input ! = 0 인 경우
System.out.println("입력하신 숫자는 0이 아닙니다.");
}
}
}
숫자를 하나 입력하세요5
입력하신 숫자는 0이 아닙니다.
숫자를 하나 입력하세요0
입력하신 숫자는 0입니다
if-else if 문
처리해야할 경우의 수가 셋 이상인 경우 사용한다.
if(조건식1){
// 조건식1의 연산결과가 참일 떄 수행될 문장들을 적는다.
} else if (조건식2){
// 조건식2의 연산결과가 참일떄 수행될 문장들을 적는다.
} else if (조건식3){ //여러 개의 else if를 사용할 수 있다.
// 조건식3의 연산결과가 참일 떄 수행될 문장들을 적는다.
} else { // 마지막에는 보통 else 블럭으로 끝나며, else 블럭은 생략 가능하다.
//위의 어느 조건식도 만족하지 않을 때 수행 될 문장들을 적는다.
}
package ch04;
import java.util.*;
public class FlowEx4 {
public static void main(String[] args) {
int score = 0; //점수를 저장하기 위한 변수
char grade = ' '; // 학점을 저장하기 위한 변수. 공백으로 초기화 한다.
System.out.print("점수를 입력하세요.>");
Scanner scanner = new Scanner(System.in);
score = scanner.nextInt(); //화면을 통해 입력받은 숫자를 score에 저장
if(score >=90) {
grade ='A';
} else if (score >=80) {
grade ='B';
} else if (score >= 70) {
grade = 'C';
} else {
grade = 'D';
}
System.out.println("당신의 학점은" +grade + "입니다.");
}
}
실행결과 1
점수를 입력하에요 > 70
당신의 학점은 C입니다.
점수를 입력하세요.>63
당신의 학점은D입니다.
중첩 if 문
if문의 블럭 내에 또 다른 if문을 포함시키는 것이 가능한데 이것을 중첩 if 문이라고 부르며, 중첩의 횟수 제한은 없다.
if(조건식1){
// 조건식1의 연산결과가 true일 떄 수행될 문장들을 적는다.
if(조건식2){
// 조건식1과 조건식2가 모두 true일 떄 수행될 문장들
} else {
// 조건식 1이 true이고, 조건식2가 false일 때 수행되는 문장들
}
} else {
// 조건식 1이 false일 때 수행되는 문장들
}
if(num >=0){
if (num ! =0)
sign = '+';
} else {
sign = '-';
}
package ch04;
import java.util.*;
public class FlowEx5 {
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(); // 화면을 통해 입력받은 점수를 score에 저장
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 if (score < 84) {
opt = '-';
}
} else {
grade ='C';
}
System.out.printf("당신의 학점은 %c%c입니다.%n", grade, opt);
}
}
점수를 입력해주세요>100
당신의 점수는 100입니다.
당신의 학점은 A+입니다.
점수를 입력해주세요>81
당신의 점수는 81입니다.
당신의 학점은 B-입니다.
점수를 입력해주세요>85
당신의 점수는 85입니다.
당신의 학점은 B0입니다.
switch문
switch문은 단 하나의 조건식으로 많은 경우의 수를 처리할 수 있고, 표현도 간결하므로 알아보기 쉽다.
따라서 처리할 경우의 수가 많은 경우에는 if문 보다 switch문으로 작성하는 것이 좋다.
switch ( 조건식 ) {
case 값1:
// 조건식의 결과가 값1과 같을 경우 수행될 문장들
//...
break;
case 값2 :
// 조건식의 결과가 값2와 같을 경우 수행될 문장들
//...
break; // switch문을 벗어난다.
//...
default :
// 조건식의 결과와 일치하는 case문이 없을떄 수행될 문장들
// ...
}
switch 문의 제약조건
- switch문의 조건식 결과는 정수 또는 문자열이어야 한다.
- case문의 값은 정수 상수만 가능하며, 중복되지 않아야 한다.
public static void main(String[] args){
int num, result;
fianl int ONE = 1;
...
switch(result){
case '1': //OK. 문자 리터럴(정수 상수 49와 동일
case ONE: //OK. 정수 상수
case "YES": //OK. 문자열 리터럴.
case num : //에러.변수는 불가
case 1.0 : //에러. 실수도 불가
...
}
package ch04;
import java.util.*;
public class FlowEx6 {
public static void main(String[] args) {
System.out.print("현재 월을 입력하세요.>");
Scanner scanner = new Scanner(System.in);
int month = scanner.nextInt(); //화면을 통해 입력받은 숫자를 month에 저장
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("현재의 계절은 가을입니다.");
default:
case 12: case 1: case 2:
System.out.println("현재의 계절은 겨울입니다.");
}
}
}
현재 월을 입력하세요.>3
현재의 계절은 봄입니다.