JAVA/JAVA1

[java1] #10 - Random 함수

yoonddo 2022. 10. 12. 19:46

프로그래밍을 하다보면 (특히 게임) 난수를 생성할 일이 있다.

난수는 무작위 숫자를 뜻하지만 컴퓨터 쪽에선 100% 랜덤은 아니다. 왜냐하면 정해진 난수표에서

숫자를 가져오는 방식이기 때문이다. 자바(JAVA)에서 난수를 생성하는 방법은 크게 두가지이다.

1. Math.random()

Math Class의 random 함수는 double형 타입으로 0.0이상 1.0미만 사이의 값을 반환한다.

예시)

public class TestRandom {
    public static void main(String[] args) {        
        for(int i =0; i < 10; i++) {
            System.out.print(Math.random()+" ");
        }
        System.out.println("");       //for문을 이용해 반환
        
        
        System.out.println((int) (Math.random() * 6) + 1);   //print문에 간단하게 반환
    }
}

두번째 방법은 보통 자연수의 난수가 필요한 경우가 많기 때문에 1~6까지의 숫자가 필요하다고 가정했을 때

0~5까지의 난수 +1을 해주면 필요한 난수를 얻을 수 있다. 만약 0~5까지의 난수가 필요하다면 *6만 해주면 된다.

그리고 앞에 int 형으로 강제 형변환을 시켜주면 된다.

결과

0.1652487713090327 0.286398184817342 0.4336343206580924 0.4295581874855847 
0.44636521032290466 0.8715008193305886 0.93917325018134 0.5647002564584279 
0.7323427296788428 0.8295767550811228

6

하지만 이 방식은 직관적이지 않고 형변환 등을 하면서 Exception 처리 등을 해줘야 하기 때문에

추천하지 않는다.


2. Random Class

두번째로 Random Class를 이용하는 방식이 있다. 난수를 생성하는데 필요한 기능들을 묶어놓은 클래스이다.

Random Class를 사용하려면 import java.util.Random;을 해줘야 한다.

클래스의 멤버변수중 setSeed를 이용하거나 생성자에 매개변수로 시스템시간을 매개로 전달하면

난수표의 시드값을 초기화 할 수 있다.

예시)

import java.util.Random;

public class RandomTest {
	public static void main(String[] args) {
		Random random = new Random(System.nanoTime());
        for(int i =0; i < 10; i++) {
            System.out.print((int)(random.nextInt(10)) + " ");
        }
        System.out.println("");            //for문을 이용해0~9까지의 정수를 출력하는 예제
        
        
//      Random random = new Random();
//		System.out.println(random.nextDouble());
//		System.out.println(random.nextInt());
//		System.out.println(random.nextInt(6) + 1);    //random class의 멤버함수들을 사용해 출력하는 에제
	}
}

결과

12 38 33 29 4 17 

0.1115044601773606
483054497
6

Random Class의 멤버함수

함수 설명
nextInt(int i) 0부터 i 까지의 랜덤한 숫자를 리턴
nextInt() Int 타입의 최소 ~ 최대범위 안에서 랜덤한 숫자를 리턴
nextLong() Long 타입의 최소 ~ 최대범위 안에서 랜덤한 숫자를 리턴
nextDouble() Double 타입의 0.0 – 1.0까지의 랜덤한 숫자를 리턴
nextBoolean() boolean타입의 true, false 중 랜덤한 값을 리턴

참고 : https://hijuworld.tistory.com/77