Notice
Recent Posts
Recent Comments
Link
«   2025/03   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
Archives
Today
Total
관리 메뉴

개발자

[JAVA 10일차] random(랜덤정수,랜덤알파벳,인증키,랜덤홀짝맞추기, 가위바위보,정수 맞히기 게임) 본문

개발자/JAVA

[JAVA 10일차] random(랜덤정수,랜덤알파벳,인증키,랜덤홀짝맞추기, 가위바위보,정수 맞히기 게임)

GoGo개발 2022. 8. 17. 20:17
random

1.Math.random

java.lang.Math.random(); 메소드는 0.0 이상 1.0 미만의 실수(double)값을 랜덤하게 나타내어주는 메소드이다.
즉, 0.0 <= 임의의 난수(실수) < 1.0 를 나타낸다. static메소드라 인스턴스가 필요없다.

 

<사용 방법>

  랜덤한 정수 = (int) (Math.random()*구간범위) + 시작값;

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
 
        /*              1 부터 10 까지 중 랜덤한 정수를 얻어오겠습니다.
              
              랜덤한 정수 = (int) (Math.random()*구간범위) + 시작값;
              
              Math.random()
                  0.0                        (int) (0.0*(10-1+1)) + 1;    ==>     1   마지막값-처음값+1  + 처음값
                  0.972153277958099        (int) (0.972153277958099*(10-1+1)) + 1;    ==>   9+1 = 10
                  0.17973389894955005        (int) (0.17973389894955005*(10-1+1)) + 1; ==>  1+1 = 2
                  0.99999999999999999        (int) (0.99999999999999999*(10-1+1)) + 1; ==> 9 + 1 = 10    
         */
        System.out.println("1 부터 10 까지 중 랜덤한 정수 => " + ((int)(Math.random()*(10-1+1)) + 1 ));
        System.out.println("1 부터 20 까지 중 랜덤한 정수 => " + ((int)(Math.random()*(20-11+1)) + 11 ));
        System.out.println("3 부터 7 까지 중 랜덤한 정수 => " + ((int)(Math.random()*(7-3+1)) + 3 ));
cs

 

2.new Random() 

 

: Math.random(); 은 보안상 위험하므로 이것을 사용하지 말고 new Random() (); 을 사용하는 것이 더 안전하다.

인스턴스 메소드라 객체 필요

 

랜덤한 정수 = rnd.nextInt(마지막수 - 처음수 + 1) + 처음수;

 

1
2
3
4
5
6
7
8
9
 
        Random rnd = new Random();
        //    랜덤한 정수 = rnd.nextInt(마지막수 - 처음수 + 1) + 처음수; / 인스턴스 메소드라 객체 필요
        
        
        System.out.println("1 부터 10 까지 중 랜덤한 정수 => " + (rnd.nextInt(10 - 1 + 1+ 1));
        System.out.println("1 부터 20 까지 중 랜덤한 정수 => " + (rnd.nextInt(20 - 11 + 1+ 11));
        System.out.println("1 부터 20 까지 중 랜덤한 정수 => " + (rnd.nextInt(7 - 3 + 1+ 3)); ));
 
cs

 

 

<랜덤소문자 출력>

 

 

1
2
3
 
        System.out.println("랜덤한 소문자 4개 출력 => " + (char)((int) (Math.random()*('z'-'a' + 1 ))+'a'));  //char가 사칙연산 만나면 int로 바꾸어짐
        System.out.println("랜덤한 소문자 4개 출력 => " + (char)(rnd.nextInt('z'-'a' + 1+ 'a'));
cs

 

 

<인증키 생성>

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
/ 인증키는 랜덤한 숫자3개(0~9)에다가 랜덤한 소문자 4개로 이루어진다.
        // 예> 104qdtq    020abat
        
        String authentication_key_1 = "";
        
        for(int i=0; i<3; i++) {  //숫자뽑기
             authentication_key_1 += (int) (Math.random()*(9-0+1)) + 0;
        }
        System.out.println(authentication_key_1);
        
        for(int i=0; i<4; i++) { //알파벳 뽑기
            char ch = (char)((int) (Math.random()*('z'-'a'+1)) + 'a');
            authentication_key_1 += ch;
        }
        System.out.println(authentication_key_1);
        
        
        String authentication_key_2 = "";
        
        for(int i=0; i<3; i++) {
            authentication_key_2 += (rnd.nextInt(9 - 0 + 1+ 0);
        }
        
        for(int i=0; i<4; i++) {
            authentication_key_2 += (char)(rnd.nextInt('z' - 'a' + 1+ 'a');
        }
        System.out.println(authentication_key_2);
        
        
        System.out.println("\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
 
        System.out.println("인증키 => " + MyUtil.authentication_key());
cs

 

<랜덤 홀짝 맞추기>

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
        
        /*
             -- 컴퓨터가 0 또는 1 중에 랜덤한 숫자를 생성해주어야 한다.
             -- 만약에 컴퓨터가 생성한 랜덤한 숫자가 0일 경우
             -- 만약에 컴퓨터가 생성한 랜덤한 숫자가 1일 경우
                 
              사용자선택[1:홀수 / 0:짝수] => 0엔터
              <결과> 맞추었습니다.
              컴퓨터가 낸수 : 0
              
              사용자선택[1:홀수 / 0:짝수] => 0엔터
              <결과> 틀렸습니다.
              컴퓨터가 낸수 : 1
              
              >> 또 할래?[Y/N] => s
              [경고] Y 또는 N 만 가능합니다.
              
              >> 또할래?[Y/N] => y
              
              사용자선택[1:홀수 / 0:짝수] => 2엔터
              [경고] 홀짝 선택은 0 또는 1 만 가능합니다.
              
              사용자선택[1:홀수 / 0:짝수] => 강아지엔터
              [경고] 홀짝 선택은 0 또는 1 만 가능합니다.
              
              사용자선택[1:홀수 / 0:짝수] => 1엔터
              <결과> 맞추었습니다.
              컴퓨터가 낸수 : 0
              
              사용자선택[1:홀수 / 0:짝수] => 0엔터
              <결과> 틀렸습니다.
              컴퓨터가 낸수 : 0
              
              >> 또할래?[Y/N] => n
              
              == 프로그램 종료 == 
          
         */
    public static void main(String[] args) {
        
        Random rnd = new Random();
        
        outer:
        do {
        
            //컴퓨터가 0 또는 1 중에 랜덤한 숫자를 생성해주어야 한다.
            //랜덤한 정수 = rnd.nextInt(마지막수 - 처음수 + 1) + 처음수; / 인스턴스 메소드라 객체 필요
            int pc_no = rnd.nextInt(1 - 0 + 1+ 0;
            
            Scanner sc = new Scanner(System.in);
            
            int user_no;
            do {
                System.out.print("사용자선택[1:홀수 / 0:짝수] => ");
                
                try {
                    user_no = Integer.parseInt(sc.nextLine()); //user_no 지역변수되서 오류뜨니까 밖으로 빼준다
                    
                    if(user_no == 0 || user_no == 1) {
                        break;
                    }
                    else {
                        System.out.println("[경고] 홀짝 선택은 0 또는 1 만 가능합니다.");
                    }
                        
                } catch(NumberFormatException e) {
                    System.out.println("[경고] 홀짝 선택은 0 또는 1 만 가능합니다.");
                }
            } while(true);
                
            String result = (pc_no==user_no)?"맞추었습니다.":"틀렸습니다."//삼항 연산자 썻지만 if도 괜찮다 
            
            System.out.println("<결과>" + result);
            System.out.println("컴퓨터가 낸수 : "+ pc_no+"\n");
            
            do {
                System.out.print(">> 또할래?[Y/N] => ");
                String yn = sc.nextLine();
                
                if("y".equalsIgnoreCase(yn)) {
                    break;  
                }
                else if("n".equalsIgnoreCase(yn)) {
                    sc.close();
                    break outer;
                }
                else {
                    System.out.println("[경고] Y 또는 N 만 가능합니다.");
                }
            } while (true);
        } while (true);
        
        
        
        
        
        System.out.println("== 프로그램 종료 ==");
 
cs

 

<가위바위보>

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
        /*
         -- 컴퓨터가 1 또는 2 또는 3 중에 랜덤한 숫자를 생성해주어야 한다.
         -- 만약에 컴퓨터가 생성한 랜덤한 숫자가 1일 경우는 컴퓨터가 가위를 냈다라고 본다.
         -- 만약에 컴퓨터가 생성한 랜덤한 숫자가 2일 경우는 컴퓨터가 바위를 냈다라고 본다.
         -- 만약에 컴퓨터가 생성한 랜덤한 숫자가 3일 경우는 컴퓨터가 보를 냈다라고 본다.
         
         
         ============= 메뉴 ==============
         1.가위    2.바위    3.보        4.게임종료
         ================================
         >> 메뉴번호를 선택하세요 => 강아지엔터     
         [경고] 메뉴에 없는 번호 입니다.!!
         
         ============= 메뉴 ==============
         1.가위    2.바위    3.보        4.게임종료
         ================================
         >> 메뉴번호를 선택하세요 => 7엔터     
        [경고] 메뉴에 없는 번호 입니다.!!
        
        ============= 메뉴 ==============
         1.가위    2.바위    3.보        4.게임종료
         ================================
         >> 메뉴번호를 선택하세요 => 1엔터 
         [게임결과] 사용자님이 이겼습니다 ^o^    
         [게임결과] 사용자님이 비겼습니다
         [게임결과] 사용자님이 졌습니다 ㅠㅠ
         
         ============= 메뉴 ==============
         1.가위    2.바위    3.보        4.게임종료
         ================================
         >> 메뉴번호를 선택하세요 -> 4
         [게임종료] 안녕히 가세요~~~
    
         
         == 프로그램 종료 ==
     */
    
    
    public static void main(String[] args) {
    
        Random rnd = new Random();
        Scanner sc = new Scanner(System.in);
        
        String str_input =""// 지역변수되니까 빼주기
        
        do {
            //컴퓨터가 1 또는 2 또는  3중에 랜덤한 숫자를 생성해주어야 한다.
            //랜덤한 정수 = rnd.nextInt(마지막수 - 처음수 + 1) + 처음수; / 인스턴스 메소드라 객체 필요
            int pc_no = rnd.nextInt (3 - 1 + 1+ 1;
            
            System.out.println("============= >> 메뉴 << ===========\n"
                             + "1.가위    2.바위    3.보    4.게임종료\n"
                             + "===================================");
            System.out.print(">> 메뉴번호를 선택하세요 => ");
            
            str_input = sc.nextLine();
            
            // 메뉴에 없는 것을 선택한 경우 예) 강아지엔터 또는 7엔터
            
            if!"1".equals(str_input) && // false니까 true가 온다 ! 있어서?
                !"2".equals(str_input) &&
                !"3".equals(str_input) &&
                !"4".equals(str_input)){  //&& 대신 || 쓰면 안된다
                System.out.println("[경고] 메뉴에 없는 번호 입니다.!!\n");
            }    
            else if(!"4".equals(str_input)){  // 메뉴중에 1 또는 2또는 3을 선택한 경우
                
                String msg = "";
                
                // 사용자가 이긴 경우
                if(("1".equals(str_input) && pc_no==3 ) ||
                   ("2".equals(str_input) && pc_no==1 ) ||
                   ("3".equals(str_input) && pc_no==2 ) ){
                    msg ="[게임결과] 사용자님이 이겼습니다 ^o^\n";
                }
 
                // 사용자가 진 경우(PC가 이긴경우)
                else if(("1".equals(str_input) && pc_no==2 ) ||
                        ("2".equals(str_input) && pc_no==3 ) ||
                        ("3".equals(str_input) && pc_no==1 ) ){
                        msg ="[게임결과] 사용자님이 졌습니다 ㅠㅠ\n";
                }
                
                    
                // 비긴 경우
                else {
                    msg ="[게임결과] 비겼습니다.\n";
                }
                
                // 게임종료
                System.out.println(msg); // 지역변수니까 {} 안에쓰기
                
            }// end of else if (first)
            
            else { // 메뉴중에 4를 선택한 경우
                System.out.println("[게임종료] 안녕히 가세요~~\n");
            }
 
            
        } while (!("4".equals(str_input))); //4라면 !true 니까 false가 되어서 나가진다
        
        sc.close();
        System.out.println("\n == 프로그램종료 ==");
        
 
 
    }
cs

 

 

<내가한 코딩> 정수 유효성 검사 추가

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
        
        do {
            
            System.out.println("============= 메뉴 ==============\r\n"
                        + "         1.가위    2.바위    3.보        4.게임종료\r\n"
                        + "         ================================\n");
            System.out.print(">> 메뉴번호를 선택하세요 => ");
            
            int pc_num = rnd.nextInt(3 - 1 + 1)+1 ; 
            
            try {
                
                int menu_no = Integer.parseInt(sc.nextLine()); 
                
                if ( menu_no <=0 || menu_no > 4) {
                    
                    System.out.println("[경고] 메뉴에 없는 번호 입니다.!!");
                }
                
                else if ( menu_no ==4 ) {
                    System.out.println("[게임종료] 안녕히 가세요~~~");
                    
                    break;
                }
                
                else {
                    
                    if (pc_num == menu_no) {
                        
                        System.out.println("[게임결과] 사용자님이 비겼습니다");
                        System.out.println("컴퓨터가 낸 수 : "+pc_num);
                        
                    }
                    
                    else if ((pc_num==1 && menu_no==2||
                             (pc_num==2 && menu_no==3||
                              (pc_num==3 && menu_no==1))
                    {
                        
                        System.out.println("[게임결과] 사용자님이 이겼습니다 ^o^    ");
                        System.out.println("컴퓨터가 낸 수 : "+pc_num);
                    }
                    
                    else {
                        
                        System.out.println("[게임결과] 사용자님이 졌습니다 ㅠㅠ");
                        System.out.println("컴퓨터가 낸 수 : "+pc_num);
                    }
                }
                
                
            }catch (NumberFormatException e) {
                
                System.out.println("[경고] 정수만 입력하세요");
                
            }
        
        
            
        }while(true);
        
        
        sc.close();
        System.out.println("== 프로그램 종료 ==");
        
    }
cs

 

 

<정수 맞히기 게임>

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
    /*
          pc가 만들 수 있는 숫자는 1~100 까지 중 아무거나 1개를 만든다.
          
              예> 59 (PC가 랜덤하게 만든숫자)
              
              1부터 100 사이의 숫자 입력 => 50엔터
              >> 50보다 큰 값입니다.
              
              1부터 100 사이의 숫자 입력 => 71엔터
              >>71보다 적은 값입니다.
              
              1부터 100 사이의 숫자 입력 => 71엔터
              >>60보다 적은 값입니다.
              
              1 부터 100 사이의 숫자 입력 => 58엔터
              >>58보다 큰 값입니다.
              
              1 부터 100 사이의 숫자 입력 => 50엔터
              #### 빙고!! 5번만에 맞추었습니다. ###
          
     */
    public static void main(String[] args) {
        
        Random rnd = new Random();
        Scanner sc = new Scanner(System.in);
        
        //String str_input
        //랜덤한 정수 = rnd.nextInt(마지막수 - 처음수 + 1) + 처음수;
        int pc_no = rnd.nextInt(100 - 1 +1+ 1;
        int count = 0//1부터 100사이의 숫자 임력하여 시도한 회수
        
        do {
            System.out.print("1부터 100 사이의 숫자 입력 => ");
            
            
            try {
                int user_num = Integer.parseInt(sc.nextLine());// 강아지 엔터
                                                             // 1.2345엔터
                if(user_num < 1 || user_num >100) {  // 2330 엔터
                System.out.println("[경고] 1부터 100 사이의 숫자만 입력하세요!");
                }
            
                else {
                    count++;
                    
                    if(user_num < pc_no) {
                        System.out.println(">>"+ user_num+ "보다 큰 값입니다.\n");
                    }
                    else if(user_num > pc_no) {
                        System.out.println(">>"+ user_num+ "보다 적은 값입니다.\n");
                    }
                    else {
                        System.out.println("#### 빙고!!"+ count+"번만에 맞추었습니다. ###\n");    
                        break;
                    }
                }    
            } catch (NumberFormatException e) {
                System.out.println("[경고] 1부터 100 사이의 숫자만 입력하세요!");
                
              } // end of try---------------------
                
            
            
        } while (true);
    sc.close();
    System.out.println("== 프로그램 종료==");
cs

 

랜덤 참고 블로그 :

https://coding-factory.tistory.com/530

 

[Java] 자바 난수(랜덤 숫자) 생성하기 (Math, Random)

자바에서 난수를 얻어내는 방법은 Random클래스를 활용하는 방법과 Math클래스를 활용하는 방법 2가지가 있습니다. 두 방법의 차이점은 Math.random() 메소드는 0.0에서 1사이의 double 난수를 얻는데만

coding-factory.tistory.com

 

<12일차 로또 이어서보기>