-> 조건식의 결과에 따라 코드 실행 여부를 결정하는 구문
-> 조건식의 결과가 true이면 if문 실행
-> 조건식의 결과가 false이면 if에서 빠져나감
-> 보통 중괄호를 통해 사용되지만, 중괄호를 사용하지 않을 경우 if문 아래의 첫째줄만 적용된다
-> if문 안에 if문 사용 가능 (다중 if문 사용 가능)
-> 모든 형태의 타입 값을 사용할 수 있음
-> 범용의 성질을 가지므로 논리 오류를 제대로 체크하기가 힘들다
-> 형태
if(조건식) {
실행문
}
-> if의 조건식이 결과가 충족되지 않았을 때 다음으로 실행되는 질문
-> 여러개 사용 가능
-> 형태
else if(조건식) {
실행문
}
-> if나 else if의 조건식이 맞지 않았을 때 최종적으로 실행되는 질문
package ch04.sec02;
public class IfExample {
public static void main(String[] args) {
int score = 56;
if(score>=90) { // score 값이 90 이상인지 확인
System.out.println("A");
System.out.println("90점 이상");
}
else if(score>=80) { // score 값이 80 이상인지 확인
System.out.println("B");
System.out.println("80점 이상");
}
else if(score>=70) { // score 값이 70 이상인지 확인
System.out.println("C");
System.out.println("70점 이상");
}
else { // 위의 조건 모두 맞지 않으면 실행되는 구문
System.out.println("D");
System.out.println("낙제");
}
}
}
Math.random()
-> 0.0보다 크거나 같고 1.0보다 작은 임의의 실수를 도출함
-> Math : 수학 관련 클래스로 수학 관련 기능이 구현됨
-> random() : 난수를 발생함
package ch04.sec02;
public class Ifrandom {
public static void main(String[] args) {
int num = (int)(Math.random()*5) + 1;
// Math.random() : 0.0 <= n < 1.0의 임의의 난수를 받음
// 실수 형태로 값을 받기 때문에 정수 형태로 출력하기 위해서는 int로 강제 형변환을 시켜줘야함
// 사용할 숫자의 가짓 수만큼 곱하기
// 시작할 숫자만큼 더하기 (1부터 시작하기 위해서는 1을 더하기)
// 1에서 5까지의 숫자를 임의로 받아 3이 나오면 당첨되는 구문
if(num == 3) { // num이 3일 경우
System.out.println("당첨되었습니다.");
}
else { // num이 3이 아닐경우
System.out.println("꽝!");
}
}
}
package ch04.sec02;
public class exam03 {
public static void main(String[] args) {
int score = (int)(Math.random()*41) + 60;
// 정수 60부터 41개의 정수를 받기(100까지)
System.out.println("점수: " + score);
String grade;
if(score>=90) {
if(score>=95) // 중첩 if문
grade = "A+";
else
grade = "A";
}
else if(score>=80) {
if(score>=85)
grade = "B+";
else
grade = "B";
}
else if(score>=70) {
if(score>=75)
grade = "C+";
else
grade = "C";
}
else {
if(score>=65)
grade = "D+";
else
grade = "D";
}
System.out.println("등급: " + grade);
}
}
-> switch문 괄호 안의 변수 값에 따라 해당 case의 실행문을 실행
-> case의 값에 따라 실행 결과의 차이가 있음
-> case값은 정수 또는 문자열만 가능
(byte, short, char, int, long, String)
-> case의 값을 중첩해서 사용할 수도 있음
ex)
switch(변수){
case 값1 :
실행문
break; : 구문을 빠져나오게 하는 역할 (없으면 무한실행,,)
case 값2 :
실행문
break;
default :
실행문 : if문의 else와 기능이 동일
}
package ch04.sec03;
public class SwitchCase1 {
public static void main(String[] args) {
double a = Math.random()*6 + 1; //1~6까지의 임의의 난수 얻음
int num = (int) a; // 난수 값을 정수값으로 변환
System.out.println(a);
switch(num) { //switch는 반드시 정수/문자 값만 들어감
case 1: // 값이 1일 경우
System.out.println("1번");
break;
case 2: // 값이 2일 경우
System.out.println("2번");
break;
case 3: // 값이 3일 경우
System.out.println("3번");
break;
case 4: // 값이 4일 경우
System.out.println("4번");
break;
case 5: // 값이 5일 경우
System.out.println("5번");
break;
default: // 위의 구문에 값이 없는 경우 (else와 동일)
System.out.println("6번");
break;
}
}
}
package ch04.sec03;
public class SwitchCase2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int time = (int)(Math.random()*4) + 8;
// 8부터 11까지의 임의의 수 받음
System.out.println("현재시간: " + time + "시");
switch(time) {
case 8 :
System.out.println("출근");
case 9 :
System.out.println("회의");
case 10:
System.out.println("업무");
default:
System.out.println("외근");
//break문을 사용하지 않았기 때문에 해당 수의 실행문부터 모두 출력됨
}
}
}
switch(변수){
case 값1 :
case 값2 :
실행문
break;
}
-> 위의 코드의 경우 값1과 값2의 실행 결과가 같음
package ch04.sec03;
public class SwitchCase {
public static void main(String[] args) {
// TODO Auto-generated method stub
char grade = 'd';
switch(grade) {
case 'A':
case 'a': // 'A'와 'a'의 값이 나왔을때의 실행문 : or(|) 연산자의 역할을 함
System.out.println("90점 이상");
break;
case 'B':
case 'b':
System.out.println("80점 이상");
break;
case 'C':
case 'c':
System.out.println("70점 이상");
break;
default :
System.out.println("낙제");
}
}
}
-> break문을 없애고 '->'를 사용해 가독성을 높인 Switch문!
-> 일반 switch문과 다르게 default문을 생략하면 안됨
-> Java 12 버전부터 사용 가능!
-> 형태
switch(변수){
case 값1, 값2 -> 실행문 (일반 switch문의 중첩 case문과 동일)
case 값3, 값4 -> 실행문
default -> 실행문 (생략 x)
}
-> 정수 타입 변수에 switch문을 대입하여 값을 리턴받는 형태
-> yield : 대입 switch문 안에 또 다른 타입의 변수를 선언하여 그 변수값을 대입하는 형태!
-> Java 13 버전부터 사용 가능!
package ch04.sec03;
public class exam04 {
public static void main(String[] args) {
String grade = "A";
// Java 11 이전에 사용하던 문법
int score1 = 0;
switch (grade) {
case "A+" :
score1 = 100;
break;
case "A" :
int result = 100-10; // result라는 임시 변수를 부여함
score1 = result; // 값을 score1에 대입함
break;
case "B" :
result = 100 - 20;
score1 = result;
break;
case "C" :
result = 100 - 30;
score1 = result;
break;
default:
score1 = 60;
}
System.out.println(score1);
// Java 13부터 사용 가능한 문법 (expression switch문)
int score2 = switch(grade) { //int 타입의 변수 자체에 switch 문을 대입시키는 것
case "A+" -> 100; // ->: 표현식 (실행 단위)
case "A", "a" -> {
int result = 100 - 10;
yield result;
}
case "B", "b" -> {
int result = 100 - 20;
yield result;
}
case "C", "c" -> {
int result = 100 - 30;
yield result;
}
default -> 60; //표현식 switch문은 default 값이 무조건 존재해야함
}; // 온전히 int 변수값이므로 ;을 꼭 붙여주기!
System.out.println(score2);
}
}