개발자
[JAVA 10일차] random(랜덤정수,랜덤알파벳,인증키,랜덤홀짝맞추기, 가위바위보,정수 맞히기 게임) 본문
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일차 로또 이어서보기>
'개발자 > JAVA' 카테고리의 다른 글
[JAVA 11일차]회원가입 메소드화/공백 제거/toCharArray/특정문자열제거해서 뽑아내기/세자리 마다 ,(콤마) 찍어주기 (0) | 2022.08.18 |
---|---|
[JAVA 10일차]array(배열)/회원가입 (0) | 2022.08.18 |
[JAVA 9일차] 다중 for문/continue/구구단/레이블사용하여break/equalsIgnoreCase/별찍기/while문/do while문 (0) | 2022.08.16 |
[JAVA 8일차] sum/대,소문자,특수문자 개수 알아오기/계좌번호 유효성검사 (0) | 2022.08.16 |
[java 7일차] for문/trim/isEmpty/isdigit/유효성검사(숫자,오류횟수,비밀번호) (0) | 2022.08.15 |