자바/자바 입문 공부일지

자바 기초 공부 일지 33. 난수(Random)

Tomitom 2022. 11. 1. 13:52
반응형

난수란 정의된 범위 내에서 무작위로 추출된 수입니다. 

다음에 무슨 수가 나올지 알 수 없는 수, 즉 랜덤Random 수를 난수라고 합니다. 

 

난수를 생성하는 구문은 다음과 같습니다.

 

Random rand = new Random();

 

각 랜덤 기능별 키워드는 다음과 같습니다. 

 

   public boolean nextBoolean()   boolean형 난수 반환

   public int nextInt()   int형 난수 반환

   public long nextLong()   long형 난수 반환

   public int nextInt(int bound)   0 이상 bound 미만 범위의 int형 난수 반환

   public float nextFloat()   0.0 이상 1.0 미만의 float형 난수 반환

   public double nextDouble()   0.0 이상 1.0 미만의 double형 난수 반환

 

package day17;

import java.util.*;

public class Random02 {

	public static void main(String[] args) {
		Random rn = new Random();		// 랜덤 인스턴스 생성
		
		// 로또 번호 추첨하기 
			for(int i = 0 ; i < 5 ; i++) {		// 5번 반복 
			int num = rn.nextInt(45) +1 ;	// 45미만 + 1의 int 난수 반환 
			System.out.println(num);			
		}
		
	}

}

 

 

Random 난수를 만들 때 seed 기반의 랜덤 인스턴스를 생성합니다. 

랜덤은 자체적으로 어떻게 숫자를 만들지에 대한 로직(알고리즘)을 가지고 있습니다. 

알고리즘에 추가할 값을 넣을 수 있습니다. 

Random rn = new Random(12);

Random() <- 괄호 안에 넣은 것이 seed 라고 합니다. 

그 안의 값을 토대로 랜덤값을 돌려서 값을 출력합니다. 

seed 를 주고 나면 여러번 실행을 해도 똑같은 값이 나옵니다.  

이것을 가짜 난수라고 합니다. (진정한 의미의 난수가 아님) 

seed를 전달하지 않았을 때에는 seed 가 없는 상태의 알고리즘에 따라 랜덤수가 출력됩니다. 

 

진정한 난수를 만들고 싶을 때에는 씨드에 시간 정보를 넣는 것이 좋습니다. 

씨드에 기재하지 않았을 때에는 자동으로 이미 작성되어 있습니다. 

System.currentTimeMillis ()는 씨드가 없을 때의 기본 값이기도 합니다. 

현재의 유동적인 시간의 시간을 기반으로 삼기 때문입니다. 

 

public Random() {
   // Random(long seed) 생성자 호출 
   this(System.currentTimeMillis()); 
}

 

다음 메소드 호출을 통해서도 씨드 값을 수시로 바꿀 수 있습니다. 

public void setSeed(long seed)

 

그럼 이제 원하는 범위 내에서 난수의 값을 출력하는 예제를 작성해보겠습니다.

 

package day17;

/*
 * Random 클래스를 활용해서 원하는 범위 내에서의 난수를 생성하자 
 * 원하는 범위는 int n1; int n2; 를 통해서 정의하자. 
 * 
 */

import java.util.Random;	// 랜덤 클래스 호출 
import java.util.Scanner;	// 스캐너 클래스 호출 

public class Quiz02 {

	public static void main(String[] args) {
		

		System.out.print("입력할 첫 번째 숫자 : ");
	
		Scanner in1 = new Scanner(System.in); // Scanner 객체 생성 
		int n1 = in1.nextInt(); 	// int 형 입력 및 리턴 
		
		
		System.out.print("입력할 두 번째 숫자 : ");
		
        Scanner in2 = new Scanner(System.in); // Scanner 객체 생성
		int n2 = in2.nextInt(); 	// int 형 입력 및 리턴 
		
		Random rn = new Random();
		
		int num = rn.nextInt(n1, n2);
		System.out.println(num);
		
		}

}

 

 

 

 

 

 

반응형