본문 바로가기

JAVA/Study

25. switch ,while조건분기문 - 선택문 , Math.random()

스위치 문은 아래와 같이 쓸 수 있다

Switch(변수){
	case 1:
        	 변수의 값이 1일경우 실행
        break;
        case 2:
        	변수의 값이 2 일경우 실행
        break;
        case 3:
        	변수의 값이 3일 경우 실행
        break;
        default :
        	변수값이 아무것도 포함되지 않을경우 실행​
 
 추가적으로 설명을 하자면
case  1 ,2 3에 오는 값은 정수 및 상수(변하지 않는수) 가 들어가야하며
문자 'A' , 'B', 'C'도 들어올수있고 문자열 "종료" , "시작" , 도 들어갈수있다
단. 실수(0.1234124)는 들어갈수없다
 
While문에 대해 간략하게 설명을하자면
while(조건문){

}

ex)


int i=0;
while(i<10){
System.out.printf("%d의 값이 10이 넘어가지 않을때까지 반복합니다\n",i);
i++;
}


ex2)
int x=10;
while(true){
     if(x<0)break;
     x--
}


//break;는 지금 반복하고있는 반복문에서 빠져나옴

중첩반복일 경우

가장 마지막에 반복하고있는 부분에서만 빠져나옴


while( y ){
}
여기서 범위의 조건이 아닌 true false로(boolean) 했을경우엔
y의 값이 false면 while문의 반복은 종료가된다

이런식으로 쓸 수 있다

아래 예제를보자


import java.util.Scanner;

public class Example {

    public static void main(String[] args) {
        //조건분기문-선택문
        //switch ~ case ~ (이런 경우의수를 case라고 함)
        /*
         switch(변수) {
            case 값1:
                실행문1;(변수의 값이 값1과 같다면 실행문1을 실행후 break;를  걸어라)
                break;
            case n;
                실행문n;
                break;
            default;
                실행문; (변수의값이 어느 case에도 속하지않으면 default를 실행함)
         }
         */
        //a+=b == a=a+b
        Scanner sc=new Scanner(System.in);
        Scanner sc2=new Scanner(System.in);
        long money;
        long balance=0;
        String id ;
        boolean ps =true;
        while(ps){
            //while은 (ps)의값이 참인 동안 반복하여라 라는 뜻 (false가 입력되면 반복의 끝)
                System.out.println("\n원하시는 번호를 누르세요[0-4]\n 1.입금\t2.출금\t3.조회\t4.가입\t0.취소");
                int num = sc.nextInt();
                switch(num){
                        case 0:
                            System.out.println("취소");
                            ps = false;
                        break;
                       
                        case 1:
                            System.out.println("입금할 금액을 적으세요 : ");
                            money = sc.nextLong();
                            balance+=money;
                            System.out.println("남은 잔액입니다 : "+balance);
                        break;
                       
                        case 2:
                            System.out.println("출금할 금액을 적으세요 : ");
                            money = sc.nextInt();
                            balance -=money;
                            System.out.println("남은 잔액입니다 : "+balance);
                        break;
                       
                        case 3:
                            System.out.println("현재의 잔액은 : "+balance);
                        break;
                       
                        case 4:
                            System.out.println("가입할 계좌번호를 입력하세요 : ");
                            id=sc2.nextLine();
                            //nextInt다음 nextLine은 나오질못함
                            //nextLine은 한줄단위라서
                            //햇갈리지않기위해 sc를 나눠서썻는데 오류가 안나게하고싶으면
                            //id=sc2.nextLine();전에 sc.nextLine();을 쓰고 다시 id=sc2.nextLine();을 써도 해결이된다
                                                                                               (개행문자를 제거하여서)
                        break;
                        default:
                            System.out.println("번호를 잘못입력하였습니다");
                }
        }//
    }

}

import java.util.Scanner;

public class Example {

    public static void main(String[] args) {
        /*
         String sw = "?";
           switch (sw){
                    case "a":
                    case "A":
                            실행값
                            break;
                    case "b":
                    case "B":
                    //이런식으로 케이스 두개를 같이쓸수도있다
*/
        Scanner sc = new Scanner(System.in);

        boolean a= true;
                while(a){
                    System.out.println("혈액형을 입력하세요 :");
                    String sw=sc.nextLine();
                                    switch(sw){
                                            case "a":
                                            case "A":
                                                System.out.println("당신의 혈액형은 A형입니다.");
                                                a=false;
                                                break;
                                            case "b":
                                            case "B":
                                                System.out.println("당신의 혈액형은 B형입니다.");
                                                a=false;
                                                break;
                                            case "ab":
                                            case "Ab":
                                            case "AB":
                                            case "aB":
                                                System.out.println("당신의 혈액형은 AB형입니다.");
                                                a=false;
                                                break;
                                            case "O":
                                            case "o":
                                                System.out.println("당신의 혈액형은 O형입니다.");
                                                a=false;
                                                break;
                                            default:
                                                System.out.println("올바른 혈액형이 아닙니다.");
                                    }//while{}
            }
    }

}

 

 


 

 
public class Example {

    public static void main(String[] args) {
/*
        String data = "C";
        //yield -> 자바 12버전이후 추가된문법(옐드)

        int num =switch(data){
        case"A" ->100;
        case "B" ->80;
        case "C" ->60;
        } //break;없이 data의 값이 A면 100대입 B면 80대입 :값은 60이 나옴
          작성기준 java se 8버전을 쓰고있는 나는 써보지못했다
 
*/
         float num1 = (float) Math.random(); //Math.random은 0<=x<1의 실수를 구하는 메소드이다
 
         int num = (int) (Math.random()*6)+1; //1~6을 무작위(랜덤) 임의의수를 대입
          //정육면체 주사위를 만들고싶으면 *6 +1 을하면된다
          //왜 +1을 하냐면 Math.random은 0을 포함 1까지의 사이 즉 0.99999999999....까지만 나오는데
          // 주사위에는 0이 없고 5.99999999999...를 int값으로 변환하면 5가 나오기때문
 
         int n45 = (int) (Math.random()*45)+1; //45를 포함한 그 사이의 임의의수를 대입
         System.out.println(num);
         //math.random을 이용하여 가위바위보도 가능하다 만들기 가능
         
         
         if(num ==1 || num ==2){
             System.out.println("하위수");
         }else if(num== 3 || num==4){
             System.out.println("중위수");
         }else {
             System.out.println("상위수");
         }
         
         //==
         
         switch(num){
                    case 1:
                    case 2:
                        System.out.println("하위수");
                        break;
                    case 3:
                    case 4:
                        System.out.println("중위수");
                        break;
                    default:                    
                        System.out.println("상위수");
         }
         
    }

}

혹시나 필요할까 싶어 가위바위보 예제도 만들었다

 

import java.util.Scanner;

public class Gbb {

    public static void main(String[] args) {
        Scanner sc =new Scanner(System.in);
       
        int com=(int) (Math.random()*3)+1;
//컴퓨터가 낼 가위바위보값의 랜덤(+1을 안해도되지만 위 예제랑 햇갈리지않기위해 +1을 해둿다
 
        System.out.println("가위바위보[1]가위 [2]바위 [3]보");
        int a = sc.nextInt();
        System.out.println("나 : "+a);
        System.out.println("컴퓨터 : "+com);
            switch(a){
                case 1:
                    if(com==1){
                        System.out.println("draw");
                    }else if(com==2){
                        System.out.println("lose");
                    }else{
                        System.out.println("win");
                    }
                break;
                case 2:
                    if(com==1){
                        System.out.println("win");
                    }else if(com==2){
                        System.out.println("draw");
                    }else{
                        System.out.println("lose");
                    }
                break;
                case 3:
                    if(com==1){
                        System.out.println("lose");
                    }else if(com==2){
                        System.out.println("win");
                    }else{
                        System.out.println("draw");
                    }
                break;
                    default:
                        System.out.println("잘못입력하였습니다");
            }
       
        sc.close();
    }

}