본문 바로가기

자바(java)

Random

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