개발자 준비과정/JAVA

[JAVA] 조건문 : if, switch

하늘바람a 2024. 3. 1. 16:07
// ifif(조건식){조건식이 true}조건식이 false
// 조건식에는 연산식(true,false 값 산출 가능)이나 boolean변수가 올 수 있다.
// if(조건식1){} else if(조건식2){} else{}
// 중첩if문 단계는 제한이 없다. if(조건식1){ if(조건식2){} else{} }else{}

// Math.random() 메소드 : 0.0<= ~ < 1.0 사이의 double 타입 난수 리턴
// 0.0<=Math.random() <1.0
// 0.0*6 <=Math.random()*6 < 1.0*6 // 모든변에 6을 곱하면 0<= ~ < 6사이의 double 타입 난수 리턴
// (int)0.0 <= ((int)Math.random()*6) < (int)6.0 // 0<= ~ < 6 사이의 정수 리턴 -> 0,1,2,3,4,5
// (0)+1 <= ((int)Math.random()*6)+1 < (6)+1 // 1<= ~ <7 사이의 정수 리턴 -> 1,2,3,4,5,6
// 주의점 : 괄호 위치
// (int)Math.random()*6 -> 항상 0이 된다. 이유 : Math.random()이 0.0<= ~ < 1.0 이므로 이 값에 int 강제형변환을 하면 0이 된다.
// 그러므로 0<= ~ < 6 값을 갖고 싶으면 ((int)Math.random()*6) 으로 써야 한다.

// start부터 시작하는 n개의 정수 중에서 하나의 정수를 얻기 위한 코드
// ((int)Math.random()*n)+start;

// 1~45 사이의 로또 번호 뽑기
// ((int)Math.random()*45) +1;


// if문의 조건식의 결과 -> true, false
// switch문 조건식의 결과 -> 변수의 값

// swtich(변수){case1: break; case2: break; default: }
// switch문은 변수의 값이 조건식의 결과이므로 조건식이 나올 수 없고 boolean 안되고 범위 지정 안된다.
// 변수값과 동일한 값을 갖는 case가 없으면 default로 가서 실행문 실행.
// default가 필요 없다면 생략 가능
// break; 다음 case를 실행하지 않고 switch문을 빠져나가기 위해 필요하다.
// 만약 다음 break가 없다면 case 값에 상관없이 case가 연달아 실행된다.
// switch(변수) 에서 괄호안의 타입은 정수타입(byte,char,short,int), 문자열 타입(String) 을 사용할 수 있다.

// Switch Expressions
// 자바12 이후부터 가능. break문 없애고 화살표와 중괄호 사용
// switch(변수){case1, 값2 -> 실행문;  case3 -> 실행문;   default -> 실행문;}
// 스위치된 값을 변수에 바로 대입 가능.
// 단일 값 -> 화살표 오른쪽에 값 기술.
// 중괄호 사용 -> yield 타입 변수값을 지정. 이 경우 default 항상 존재해야한다. // int score=switch(grade){case 'A' -> 100;  case 'B' -> {System.out.println("B입니다"); yield 80;} default -> 60;};
// yield는 마지막에 출력된다.
// 타입 변수 = switch(변수){case1 -> 변수값;  case2 -> 변수값;  case3 -> {실행문; yield 변수값;}  default -> 변수값; };

boolean a = true;
while(a) {
    Scanner scanner = new Scanner(System.in);
    String grade = scanner.next();
    int score = switch (grade) {
        case "A", "a" -> 100;
        case "B", "b" -> {
            System.out.println("B입니다");
            yield 80;
        }
        default -> {
        a=false; yield 60;}
    };
    System.out.println(score);
}