안녕하세요, 코린이의 코딩 학습기 채니 입니다.
개인 포스팅용으로 내용에 오류 및 잘못된 정보가 있을 수 있습니다.
난수란?
정해진 범위 내에서 무작위로 추출된 수를 말합니다.
자바에서 난수를 생성하는 방법은 크게 두가지가 있습니다.
① java.util.Random 활용
java.util 패키지에 있는 Random 클래스를 활용합니다.
단! 다른 패키지 내의 클래스를 사용하는 것이므로 반드시 import가 필요하겠죠?
public void test1() {
Random rnd = new Random();
int a = rnd.nextInt();
System.out.println(a);
long b = rnd.nextLong();
System.out.println(b);
}
@콘솔출력값
395785818
-1297663030753196936
-1982793233
6452393816866212613
Random클래스의 .next계열 메소드를 사용하여 랜덤 값을 불러옵니다.
각 타입별로 메소드가 지정 되어 있으며, 해당 범위 내에서 랜덤 값을 뽑습니다.
따라서 int는 -21억 ~ 21억까지의 수를, long은 약 -900경 ~ 900경의 수 중에서 랜덤으로 뽑는 것이죠.
0 ~ 9까지의 수를 추출하고 싶다면?
// nextInt(경우의 수)
int num = rnd.nextInt(10); // 0~9까지 10가지 수 추출
System.out.println(num);
@콘솔출력값
8
nextInt(int bound) 메소드를 사용하여 원하는 경우의 수만큼 ( ~ ) 안에 입력해줍니다.
0 ~ 9까지의 10가지 수 중에서 랜덤 값을 추출하였으며, 실행 할 때마다 값은 변경됩니다.
(컴퓨터는 0부터 시작하므로 0~9까지 추출)
1 ~ 10까지의 수를 추출하고 싶다면?
// nextInt(경우의 수) + 최소 값 : 최소 값 ~ 경우의 수
int num = rnd.nextInt(10) + 1; // 1~10까지 10가지 수 추출
System.out.println(num);
@콘솔출력값
1
최소 값을 지정해주면 최소 값 ~ 경우의 수까지의 수를 추출합니다.
// 50~100까지의 수 추출
num = rnd.nextInt(51) + 50; // 50~100까지 50가지 수 추출
System.out.println(num);
// 0.0이상 ~ 1.0미만 까지의 수 추출
double dnum = rnd.nextDouble();
System.out.println(dnum);
// boolean - true/false 중 임의 리턴
boolean bool = rnd.nextBoolean();
System.out.println(bool);
@콘솔출력값
77
0.8559772185337099
false
② java.lang.Math.random() 활용
☞ java.lang 패키지는 너~~무 자주 쓰이기 때문에 유일하게 import가 필요 없습니다. (JVM이 내부적으로 알아서 해줌)
(System. 도 java.lang 패키지)
public void test2() {
double num = Math.random();
System.out.println(num); //0.0이상 ~ 1.0미만 수
}
@콘솔출력값
0.023067796845727573
import가 필요 없다는 것은 객체 생성을 별도로 안해줘도 된다는 것이기 때문에 바로 Math.random()을 num에 대입해주었습니다.
단!!! Math.random()은 double로 리턴하므로 0.0이상 ~ 1.0미만의 수를 리턴해줍니다.
정수로 변환하여 0 ~ 10까지 출력하고 싶다면?
// Math.random() * 경우의 수
System.out.println((int)(Math.random()*10));
@콘솔출력값
1
원하는 경우의 수만큼 ( * 경우의 수) 해줍니다.
(0.0234... 추출되기 때문에 *10을 하면 소수점이 뒤로 이동하고, (int)로 형변환을 하여 소수점을 버립니다.)
1 ~ 10까지 출력하고 싶다면?
// (Math.random() * 경우의 수) + 최소값
System.out.println((int)(Math.random() * 10) + 1);
@콘솔출력값
8
마찬가지로 + 최소값을 해주어 범위를 지정해줍니다. (1 ~ 10 중에서 추출)
boolean bool = (int)(Math.random()*2) == 0;
System.out.println(bool);
@콘솔출력값
false
boolean도 0~1까지 수를 지정하여 0이면 true 1이면 false가 리턴되게끔 하였습니다.
동전게임 만들기
- 사용자 : 앞/뒤 베팅
- 컴퓨터 : 난수 생성 후 사용자 값과 비교 → 같으면 사용자 승, 다르면 컴퓨터 승
public void test3() {
Scanner sc = new Scanner(System.in);
Random ran = new Random();
System.out.print("> 동전 앞/뒤를 입력하세요(앞:1 뒤:2) : ");
int user = sc.nextInt();
//Math.random()
boolean com = (int)(Math.random()*2) + 1 == user;
String str = com ? "당신이 이겼습니다!" : "당신이 졌습니다.";
System.out.println(str);
//Random
// boolean com1 = ran.nextInt(2) == user;
// String str1 = com1 ? "당신이 이겼습니다!" : "당신이 졌습니다.";
// System.out.println(str1);
}
@콘솔출력값
> 동전 앞/뒤를 입력하세요(앞:1 뒤:2) : 1
당신이 이겼습니다!
'Java > Java' 카테고리의 다른 글
제어문) if문, if-else문, if- else if문, 중첩 if문 (0) | 2022.03.04 |
---|---|
메소드란?, 매개변수가 있는/없는 메소드, 리턴 값이 있는/없는 메소드 (0) | 2022.03.03 |
연산자(Operator)란?, 이항연산자, 삼항연산자, 대입연산자 (0) | 2022.03.02 |
Scanner 클래스란?, next()메소드, nextLine()메소드 (0) | 2022.03.01 |
문자열을 저장하는 String 참조형이란?, String 특징, String + 연산 (0) | 2022.02.28 |