return
: 메인 함수의 종료break
: 해당 if문만 종료else
: 상위 조건식의 거짓 (하나의 수평선)package me.day04.nestedIf;
public class NestedIfExample {
public static void main(String[] args) {
int score = 91;
String grade = "";
int age = 30;
//// return (유효성 검증1)
if (!(score >= 0 && score <= 100)) {
System.out.println("유효하지 않은 score입니다.");
return;
} // else if (!(age >= 0 && age <= 100)) {
// System.out.println("유효하지 않은 데이터입니다.");
// return;
// }
// else는 상위 조건식의 거짓을 포함. score, age는 관계 없으므로 아래처럼 작성하는 것이 맞다
//// else if (이상)
if (score >= 95) {
grade = "A+";
} else if (score >= 90) { // 조건식1 거짓 + 조건식2 참일때
grade = "A-";
} else if (score >= 85) { // 조건식1,2 거짓 + 조건식3 참일때
grade = "B+";
} else if (score >= 80) { // 조건식1,2,3 거짓 + 조건식4 참일때
grade = "B-";
} else { // 조건식1,2,3,4 거짓 + 조건식5 참일때
// 실행문 없으면 마지막 else 생략 가능
}
System.out.printf("당신의 학점은 %s 입니다 \n", grade);
// if else if vs. if if
// else는 하나의 수평선에서 사용 한다 (유효성 검증2)
// 첫번째 유효성 검사를 통과 못하면 여기 못오므로 첫번째 if에 넣거나(내생각) 하나의 main이 아닌 별도의 함수로 구분(강사님)하는 것이 더 좋은 코드
if (!(age >= 0 && age <= 100)) {
System.out.println("유효하지 않은 age 입니다.");
return;
}
//// else if (미만)
// 10세 미만 : 아동, 20세 미만 : 청소년, 40세 미만 : 청년, 70세 미만 : 중년
if (age < 10) {
System.out.println(age + "세는 아동 입니다.");
} else if (age < 20) {
System.out.println(age + "세는 청소년 입니다.");
} else if (age <40) {
System.out.println(age + "세는 청년 입니다.");
} else { // == } else if (age < 100) { // 위에서 다 걸러냈으므로
System.out.println(age + "세는 중년 입니다.");
}
//// 중첩
// else if 로 리팩토링 하는 것이 더 클린
if (score >= 90) {
if (score >= 95) { // 95 ~
grade = "A+";
} else { // 90 ~ 94
grade = "A-";
}
} else {
if (score >= 80) {
if (score >= 85) { // 85 ~ 89
grade = "B+";
} else { // 80 ~ 84
grade = "B-";
}
} else { // ~ 79
// code 없으면 else 생략 가능
}
}
}
}
package me.day04.switchs;
public class SwitchExample {
public static void main(String[] args) {
int month = 1;
int totalDays = 0;
// switch : if 조건식의 == 생략 (잘 사용하지 않음)
switch(month) { // 정수, 문자, 문자열 (문자열은 == 아닌 equals()로 비교) // 실수, boolean은 불가
// if (month == 1) || (month == 3) || (month == 5) || ... || (month == 12) // 생략 가능
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
// case 1, 2, 3, 7, 8, 10, 12: // JDK 16 이상부터 가능
totalDays = 31;
break; // switch 블록 종료 (for의 break와 다름)
case 4:
case 6:
case 9:
case 11:
totalDays = 30;
break;
case 2:
totalDays = 28;
break;
}
System.out.println("switch out");
System.out.printf("%d월의 총 일수는 %d일 입니다\n", month, totalDays);
//// 데이터 전처리로 코드를 간단하게 (데이터의 유효성을 검증했듯이) // stream
String grade = "B".toLowerCase(); // 대문자 입력하든 소문자 입력하든 소문자로 변경 (case-insensitive)
switch(grade) {
// case "A": // if (grade.eauals("A") || grade.eauals("a")) // 문자열 비교는 == 아닌 equals()
case "a":
System.out.println("우수 회원");
break;
// case "B":
case "b":
System.out.println("일반 회원");
break;
default: // case 다 아닐 경우
System.out.println("손님");
}
}
}