난수 생성법 2가지
Math.random() 이용
아래와 같이 Math.random은 0~1.0 사이의 double을 반환하기 때문에 (int)를 취하고 있다.
(int)를 하게 되면 소수점 이하 숫자들은 버림으로 처리된다.
따라서 형 변환 이전에 곱셈을 해줘야 한다.
int attackValue = (int) (1 + Math.random() * 5); // 1~5 사이 정수 반환
int healValue = (int) (1 + Math.random() * 3); // 1~3 사이 정수 반환
아래와 같이 확률을 구현할 수도 있다. 3:7의 비율로 조건을 처리해 준 모습이다.
int attackValue = (int) (Math.random() * 10);
if (attackValue >= 7) {
return 'h';
} else {
return 'a';
}
Random Class 이용
Random 클래스는 java.util 패키지에 포함되기 때문에 import를 해줘야 한다.
Random 객체를 생성한 다음, 원하는 메서드를 사용하여 난수를 생성할 수 있다.
주요 메서드들은 주로 next+자료형 의 형태로, 인수를 넣어주지 않으면 각 자료형의 min~max 사이의 난수를 생성한다.
import java.util.Random;
public class MyRandom {
public static void main(String[] args) {
Random rd = new Random();
System.out.print(rd.nextBoolean()); // 랜덤한 boolean 출력
System.out.print(rd.nextInt(5)+1); // 1-6까지의 랜덤한 int 출력
System.out.print(rd.nextInt()); // 랜덤한 int 출력
System.out.print(rd.nextLong()); // 랜덤한 long 출력
System.out.print(rd.nextFloat()); // 랜덤한 float 출력
System.out.print(rd.nextDouble()); // 랜덤한 double 출력
}
}
Random 클래스에서는 Seed를 따로 받아서 Seed에 대응되는 난수를 생성할 수 있다. Random함수의 인자로 Seed 값을 넣어주거나, setSeed를 통해 Seed를 설정해 줄 수 있다.
Seed를 설정하지 않았을 때 매번 다른 값이 나오는 이유는 기본값으로 현재 시간 이 설정되어 있기 때문이다. 시스템 시간은 항상 변하기 때문에 매번 다른 값이 나오는 것이다.
import java.util.Random;
public class main {
public static void main(String[] args) {
Random rnd = new Random(5); // 시드값에 5를 고정
for(int i = 0; i < 5; i++) {
System.out.println(rnd.nextInt(10)+1);
}
}
}
/* 출력
8
3
5
5
7
*/
위와 같이 Random 객체의 seed값을 5로 고정하면, 몇 번을 실행해도 8,3,5,5,7의 값이 생성되는 것을 확인할 수 있다. 따라서 Random Class의 난수 생성 방식은 이미 Seed값에 따라 고정되어 있는 값을 불러온다는 사실을 유추할 수 있다.
'Java & Kotlin' 카테고리의 다른 글
[Kotlin] Kotlin 기본 문법 정리 (1편 - 변수와 상수, 함수 선언, 반복문, 조건문, 자료형, 배열) (0) | 2022.09.13 |
---|---|
[Java] Java의 Collection FrameWork, List - Map - Set, 간단히 보기! (0) | 2022.05.24 |
[Java] Comparable과 Comparator : 비교를 위한 인터페이스 (2) | 2022.04.14 |
[Java] int, char, String 사이의 형 변환 방법 정리 (0) | 2022.03.24 |