구문1:
if (조건식) {
조건식이 true 일때 실행되는 문장(들) // 반드시 boolean type 이어야함
...
}
구문2:
if (조건식) {
조건식이 true 일때 실행되는 문장(들)
...
} else {
조건식이 false 일때 실행되는 문장(들)
...
}
public class If01Main {
public static void main(String[] args) {
System.out.println("if 조건문");
int num = 10;
if(num < 0) {
System.out.println("음수입니다");
}
int num3 = 124;
if(num3 % 2 == 0) {
System.out.println("짝수입니다");
} else {
System.out.println("홀수입니다");
}
System.out.println("\n 조건식 (범위)");
int score = 101;
// if(0 <= num4 <= 100) <-- 자바는 이런 표현식 없음 / 파이썬은 있음
if(0 <= score && score <= 100) {
System.out.println(score + "유효한 점수 입니다");
} else {
System.out.println(score + "는 유효하지 않은 점수입니다");
}
System.out.println("\n프로그램 종료");
} // end main()
} // end class
- 구문3:
if (조건식1) {
조건식1 이 true 일때 실행되는 문장(들)
...
} else if (조건식2) {
조건식1 이 false 이고
조건식2 이 true 일때 실행되는 문장(들)
...
} else if (조건식3) {
조건식2 가 false 이고
조건식3 이 true 일때 실행되는 문장(들)
...
} else {
위의 모든 조건식 모두 false 일때 수행하는 문장(들)
..
}
public class If02Main {
public static void main(String[] args) {
System.out.println("if - else if - else");
int kor = 75, eng = 80, math = 83;
int total = kor + eng + math;
int avg = total / 3; // 소수점 버림
System.out.println("평균: " + avg);
// 1. 평균이 90점 이상이면 A학점 (평균: 90 ~ 100)
// 2. 평균이 80점 이상이면 B학점 (평균: 80 ~ 89)
// 3. 평균이 70점 이상이면 C학점 (평균: 70 ~ 79)
// 4. 평균이 60점 이상이면 D학점 (평균: 60 ~ 69)
// 5. 평균이 60점 미만이면 F학점
if(avg >= 90) {
System.out.println("학점: A");
} else if(avg >= 80) {
System.out.println("학점: B");
} else if(avg >= 70) {
System.out.println("학점: C");
} else if(avg >= 60) {
System.out.println("학점: D");
} else {
System.out.println("학점: F");
}
System.out.println("\n프로그램 종료");
} // end main()
} // end class
[연습문제]
package 선택제어문.자가진단08;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
double score = sc.nextDouble();
if (score >= 4.0) {
System.out.println("scholarship");
} else if (score >= 3.0) {
System.out.println("next semester");
} else if (score >= 2.0) {
System.out.println("seasonal semester");
} else {
System.out.println("retake");
}
sc.close();
}
}
- 삼항 연산자 (ternary operator)
(조건식) ? 선택1 : 선택2 // 피연산자 3개, 연산자 3개
(조건식)이 true 이면 선택1이 선택되고,
(조건식)이 false 이면 선택2가 선택됨.
public class If04Main {
public static void main(String[] args) {
System.out.println("if 문과 삼항 연산자");
int num1 = 145;
int num2 = 123;
int big; // 둘 중에서 큰값을 담아보기
big = (num1 > num2) ? num1 : num2;
System.out.println("더 큰 수 : " + big);
System.out.println("\n두 수의 차");
int num3 = -22;
int num4 = -44;
int diff = (num3 > num4) ? (num3 - num4) : (num4 - num3);
System.out.println("두 수의 차 : " + diff);
System.out.println("\n프로그램 종료");
} // end main()
} // end class
- 조건문 안의 조건문
public class If05Main {
public static void main(String[] args) {
System.out.println("중첩된 if (nested-if) 문");
int num = 98;
if(num % 2 == 0) {
System.out.println("짝수");
if(num % 4 == 0) {
System.out.println("4의배수");
} else {
System.out.println("짝수이지만 4의 배수는 아닙니다");
}
} else {
System.out.println("홀수");
if(num % 3 == 0) {
System.out.println("3의 배수");
} else {
System.out.println("홀수이지만 3의 배수는 아닙니다");
}
}
System.out.println("\n프로그램 종료");
} // end main()
[연습문제]
package 선택제어문.자가진단06;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
char gender = sc.next().charAt(0);
int age = sc.nextInt();
if (gender == 'F') {
if (age >= 18) {
System.out.println("WOMAN");
} else {
System.out.println("GIRL");
}
} else if(gender == 'M') {
if(age >= 18) {
System.out.println("MAN");
} else {
System.out.println("BOY");
}
}
sc.close();
} // end main()
} // end class()
- 문자열 비교는 절대로 == 를 사용하지 말자
- 문자열 비교는 equals(), equalsIgnoreCase() 사용!
- char 는 기본적으로 정수값 (아스키 코드값) 이라 일반 산술 비교 가능
public class If07Main {
public static void main(String[] args) {
System.out.println("String 비교, char 비교");
String str1 = "john";
String str2 = "jo";
str2 += "hn";
System.out.println("str1 = " + str1);
System.out.println("str2 = " + str2);
// 문자열 비교는 절대로 == 를 사용하지 말자
if(str1 == str2) {
System.out.println("== 같습니다");
} else {
System.out.println("== 다릅니다");
}
// 문자열 비교는 equals() 사용!
if(str1.equals(str2)) {
System.out.println("equals() 같습니다");
} else {
System.out.println("equals() 다릅니다");
}
System.out.println("\n프로그램 종료");
} // end main()
} // end class
switch (조건값){
case 값1:
...
case 값2:
...
default:
...
}
- 해당 조건의 case문을 찾아서 거기서부터 break를 만날 때까지 실행을 함.
- break를 만나게 되면 switch 문장을 종료.
- 해당하는 case가 없으면 default 문장을 실행함.
※ 모든 switch 조건문은 if - else if - else로 바꿀 수 있다. (할 수 있어야 한다)
public class Switch01Main {
public static void main(String[] args) {
System.out.println("switch 문");
int num = 1;
switch(num) {
case 1:
System.out.println("하나");
System.out.println("ONE");
break;
case 2:
System.out.println("둘");
System.out.println("TWO");
break;
case 3:
System.out.println("셋");
System.out.println("THREE");
break;
default:
System.out.println("몰라요~");
}
System.out.println();
// 모든 switch 조건문 if - else if - else로 바꿀 수 있다.
// TODO
System.out.println("\n프로그램 종료");
} // end main()
} // end class
[예시1]
package com.lec.java.switch02;
public class Switch02Main {
public static void main(String[] args) {
System.out.println("switch 연습");
// 도전
// switch ~ case 조건문을 사용해서
// 짝수 이면 --> "짝수입니다" 출력
// 홀수 이면 --> "홀수입니다" 출력
int num = 99;
switch(num % 2) {
case 0: // 짝수
System.out.println("짝수입니다");
break;
case 1:
System.out.println("홀수입니다");
break;
}
System.out.println("\n프로그램 종료");
} // end main()
} // end class
- (조건)에 따라서 해당 case로 이동
- (조건)에 사용될 수 있는 자료 타입은
- int로 변환 가능한 타입들: byte, short, int, char
- enum 타입(enum 자료형은 Java 5 버전부터 소개)
- String 타입 (Java 7 버전부터 switch 문에서 사용 가능)
[예시1 : char 타입]
public class Switch03Main {
public static void main(String[] args) {
System.out.println("switch 제약 조건");
System.out.println("char를 switch문에서 사용");
char ch = 'C';
switch(ch) {
case 'a':
System.out.println('A');
break;
case 'b':
System.out.println('B');
break;
case 'c':
System.out.println('C');
break;
default:
System.out.println("몰라요"); // 몰라요 출력. 대/소문자 구별하기 때문
}
// switch(조건) 에 사용할수 없는 값들
// long num = 1; // 에러 발생. Cannot switch on a value of type long. Only convertible int values, strings or enum variables are permitted.
// switch(num) {
//
// }
System.out.println("\n프로그램 종료");
} // end main()
} // end class
[예시2 : String 타입]
package com.lec.java.switch04;
public class Switch04Main {
public static void main(String[] args) {
System.out.println("String 타입을 switch에서 사용하기");
String language = "C++";
switch(language) {
case "Java":
System.out.println("Hello, Java!");
break;
case "C++":
System.out.println("Hello, C++");
break;
case "Kotlin":
System.out.println("Hello, Kotlin");
break;
default:
System.out.println("많은 개발 언어가 있습니다.");
}
System.out.println("\n프로그램 종료");
} // end main()
} // end class
[예시3 : enum 타입]
- enum 타입 정의하는 방법:
enum 이름 {}- enum 타입 정의 메소드 안에서는 할 수 없다.
new -> enum
enum: Country.java
package com.lec.java.switch05;
// enum : 나열된 값들을 표현하는 타입(객체)
// (enumeration)
public enum Country {
KOREA, JAPAN, USA, CHINA, RUSSIA
}
public class Switch05Main {
enum Days {SUN, MON, TUE, WED, THU, FRI, SAT} // 안에서도 정의 가능
enum Numbers {ONE, TWO, THREE}
public static void main(String[] args) {
System.out.println("enum 타입을 switch에서 사용하기");
Country cnt1, cnt2;
cnt1 = Country.KOREA;
cnt2 = Country.USA;
System.out.println(cnt1);
System.out.println(cnt2);
// System.out.println(cnt1 + 1); // 불가
System.out.println(cnt1 + "Hello");
Days day1 = Days.THU;
Days day2 = Days.MON;
switch(day1) {
case SUN: // enum 타입을 사용하는 switch 에선 enum 타입명을 생략
System.out.println("일요일");
break;
case MON:
System.out.println("월요일");
break;
case TUE:
System.out.println("화요일");
break;
case WED:
System.out.println("수요일");
break;
case THU:
System.out.println("목요일");
break;
case FRI:
System.out.println("금요일");
break;
case SAT:
System.out.println("토요일");
break;
}
System.out.println("\n프로그램 종료");
} // end main()
} // end class