반응형

임의의 정수 만들기

  • Math.random() - 0.0과 1.0사이의 임의의 double값을 반환

사실, 임의의 정수가 아니라 임의의 실수 만들기라고해도 상관없다.
임의의 정수를 "난수"라고 한다.

난수는  게임이나 섞기 할때 많이 사용한다.

그때 사용하는 메서드가 Math.random() 메서드이다. 
근데 이 메서드는

0.0 <= Math.random() < 1.0
즉, 0.0이상 1.0 미만 사이에 있는 double값을 반환한다. (0~0.9999...)

그래서 이걸 가지고 원하는 범위에 있는 난수를 얻으려면 어떻게 해야하는지를 알아보도록 하겠다.

 

예를 들어서 내가 1~3 사이의 정수를 얻고싶으면 어떻게 해야할까?

먼저, 각 변에 3을 곱한다.

이 상태에서는 0.0~2.9999... 사이의 값을 얻을 수 있다.
내가 얻고싶은 난수의 범위는 1~3사이의 정수이다. (1,2)
다음단계를 보자.

형변환을 한다. 우리가 얻고싶은 것은 정수니까, 각변의 실수를 int로 형변환 한다. 

그러면 0 <= (int)(Math.random()*3) <3이 범위가 된다.  즉 0부터2까지 이다.
내가 얻고싶은 것은 1~3 사이의 정수이다. 이제 어떻게 하면 될까?

각변에 1을 더한다.

그러면, 범위가 1 <= (int)(Math.random() * 3) + 1 < 4가 된다.
결국 처음에 원했던 1~3사이의 정수를 얻을 수 있다.

 

형변환과 덧셈, 곱셈등을 이용하는데,
처음에 곱해준 값은 내가 원하는 개별값의 갯수와 동일하다. (만약에 주사위의 범위 1~6을 구하고 싶으면 6을 곱하면 된다.)

 

[Ex4_7] 예제

public class Ex4_7 {

    public static void main(String[] args) {
        int num = 0;

        // 괄호{} 안의 내용을 20번 반복한다.

        // Quiz1. 1~10사이의 난수를 20개 출력하시오
        // 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
//        for (int i = 1; i <= 20; i++) {
//            System.out.println(Math.random());   // 0.0 <= x < 1.0
//            System.out.println(Math.random()*10);   // 0.0 <= x < 10.0
//            System.out.println((int)(Math.random()*10));   // 0 <= x < 10, 0~9
//            System.out.println((int)(Math.random()*10)+1);   // 1 <= x < 11, 1~10


        //Quiz2. -5~5사이의 난수를 20개 출력하시오
        // -5, -4, -3, -2, -1, 0, 1 ,2 ,3 ,4, 5
        for (int i = 1; i <= 20; i++) {
//            System.out.println(Math.random());  // 0.0 <= x < 1.0
//            System.out.println(Math.random()*11);  // 0.0 <= x < 11.0
//            System.out.println((int)(Math.random()*11));  // 0 <= x < 11
            System.out.println((int)(Math.random()*11)-5);  // -5 <= x < 6


        }
    }
}

 

반응형

'JAVA' 카테고리의 다른 글

중첩 for문  (0) 2022.03.20
for문  (0) 2022.03.19
switch문  (0) 2022.03.18
if-else문, 중첩 if문  (0) 2022.03.18
조건문 if문과 if-else문  (0) 2022.03.17