Random클래스: 난수를 얻어내는 클래스
public class Test {
public void me1() {
// Random클래스를 이용해서 rnd 객체 생성
Random rnd = new Random(); // ()안에 빈칸->현재시간
Random rnd2 = new Random(1);
Random rnd4 = new Random(1); // seed가 같으면 나오는 값이 일치
long t = System.currentTimeMillis(); // 현재 시간을 millisecond로 반환
Random rnd3 = new Random(t);
for (int i = 0; i < 5; i++) {
int num = rnd.nextInt(); // 난수 리턴
System.out.println(num);
}
}
==========================Console======================================
1727635085
995634582
-553104810
227736606
49826348
- seed를 설정할 수 있다
-> seed가 같으면 같은 난수를 얻는다.
public class Test {
public void me3() {
Random rnd1 = new Random(0);
Random rnd2 = new Random(0);
for (int i = 0; i < 5; i++) {
int num1 = rnd1.nextInt();
int num2 = rnd2.nextInt();
System.out.print(num1);
System.out.print(" : ");
System.out.print(num2);
System.out.print(" = ");
System.out.print(num1 == num2);
System.out.println(); // seed가 같으므로 같은 수가 나옴.
}
}
}
===================Console===================================
-1155484576 : -1155484576 = true
-723955400 : -723955400 = true
1033096058 : 1033096058 = true
-1690734402 : -1690734402 = true
-1557280266 : -1557280266 = true
nextInt(int n) : 0과 양수만 리턴
- nextInt(int n) : 0~ n-1까지
public class Test {
public void me4() {
Random rnd = new Random();
for (int i = 0; i < 5; i++) {
int num = rnd.nextInt(2); // 매개변수 존재 => 양수만 나옴
System.out.println(num+" : "+(num<0));
}
}
}
================Console========================
0 : false
1 : false
0 : false
0 : false
1 : false
- 응용
1) 로또 번호 6개를 출력하는 me43() 메서드 (로또번호 : 0~45)
public class Test {
public void me43() {
Random rnd = new Random();
for (int i = 0; i < 6; i++) {
int num = rnd.nextInt(45)+1;
System.out.println(num);
}
}
}
=================Console=========================
28
3
19
2
4
17
2) 21~27 사이의 값이 랜덤으로 3개 출력되는 me44() 메서드
public class Test {
public void me44() {
Random rnd = new Random();
for(int i=0; i<3; i++) {
System.out.println(rnd.nextInt(7)+21);
}
}
}
================Console=========================
26
27
22
==>min~max 사이의 임의의 값을 출력하고 싶다면
nextInt(max-min + 1) + min
public class Test {
public void nextInt(int min, int max, int loop) {
Random rnd = new Random();
for (int i = 0; i < loop; i++) {
int num = rnd.nextInt(max - min + 1) + min;
System.out.println(num);
}
}
자식클래스 Random2만들기
import java.util.Random;
public class Random2 extends Random{
private static final long serialVersionUID = 1L;
//아래 두개의 메서드는 이름이 같고, 매개변수개수가 다른 오버로딩
// Random클래스 상속중이라 아래처럼 표현 가능(nextInt 바로사용가능, 객체생성필요x)
public int nextInt(int min, int max) {
return nextInt(max-min+1)+min;
}
// 여러번 반복(loop만큼)
public int[] nextInt(int min, int max, int loop) {
int[] arr = new int[loop]; //배열선언공식 2번째
for(int i=0; i<arr.length; i++) {
arr[i] = nextInt(min, max);
}
return arr;
}
}
'자바(java)' 카테고리의 다른 글
Date (0) | 2023.03.15 |
---|---|
Calendar(GetInstance) (0) | 2023.03.14 |
예외처리(Exception) (1) | 2023.03.13 |
내부클래스(Inner Class) (0) | 2023.03.13 |
Enum(Enumeration) (0) | 2023.03.10 |