일본산 온라인 과금 게임같은 경우 랜덤박스로 카드를 뽑을 수 있는 시스템이 있습니다. 여기서 나오는 카드의 등급은 희소성을 기준으로 SSR(Super-super Rare), SR(Super Rare), R(Rare) 등 총 3개의 등급으로 나뉩니다. 지금 작성할 예제는 10개의 카드를 무작위로 뽑는 프로그램인데요, 카드 등급별로 나오는 확률이 전부 다릅니다.

**SSR** : 3%
*SR* : 10%
R : 87%

카드 슬롯 중 9개는 위의 확률로 카드가 나오게 되며, 마지막 칸은 무조건 SR 등급 이상의 카드가 나오도록 예외사항을 두겠습니다. 하지만 SSR의 확률은 여전히 3%를 유지해야 합니다. 즉, 마지막 카드의 출현 확률은 SSR 3%, SR 97%입니다.

public class Random01 {
  
    public static void main(String[] args) {
 
        System.out.print("| ");
        
        double randombox;
 
        for (int i = 1; i <= 9; i++)
        {
            randombox = (int) (Math.random() * (100 - 1 + 1) + 1);
            
            if ( 1 <= randombox && randombox <=  3 )
                System.out.print("**SSR**");
            else if ( 4 <= randombox && randombox <=  13  )
                System.out.print("*SR*");
            else
                System.out.print("R");
            
            System.out.print(" | ");
        }
        
        // 마지막은 무조건 SR 이상 등급이 나오게
        randombox = (int) (Math.random() * (100 - 1 + 1) + 1);
        if ( 1 <= randombox && randombox <=  3 )
            System.out.print("**SSR**");
        else if ( 4 <= randombox && randombox <=  100  )
            System.out.print("*SR*");
        System.out.print(" |");
        
    }
 
}
| R | R | R | R | R | R | *SR* | R | R | *SR* |

임의의 난수를 발생시키는 메소드로 Math.random을 사용합니다. 이 메소드를 실행하면 0~1 사이에 있는 임의의 난수가 반환됩니다. 메소드를 통해 특정 범위 내에서 난수를 발생시키고 싶을 경우 다음과 같이 사용합니다.

Math.random() * (최대 - 최소 + 1) + 최소