반응형
코딩을 하다보면 랜덤한 수(난수)를 만들어야 할 경우가 있습니다.
이럴때를 대비해서 JAVA에서는 Math.random()이라는 method를 제공하고 있습니다.
Math.random()을 쓰면 return값이 double형으로 0.0~1.0까지의 값을 가지게 됩니다.
하지만 보통은 int형 정수가 많이 필요할텐데 이럴 땐 사용할 범위만큼 곱해주면 됩니다.
예를들어 로또프로그램을 만든다면 1~45까지가 있겠죠?
그럼 Math.random()*44+1을 해줍니다.
왜냐면 0은 안쓰니깐요.
그럼 최소 1~45까지 나오게 됩니다.
1 | int lotto_first=(int)((Math.random()*44)+1); | cs |
이렇게 해주면 됩니다.
하지만 로또프로그램의 경우 중복의 수가 나와선 안됩니다.
그래서 위의 경우로 6개의 수를 뽑게되면 계속해서 중복검사를 해주어야 합니다.
위의 경우는 중복이 되도 괜찮은 경우에나 쓰입니다.
중복이 되지 않게 뽑으려면 arraylist와 collection.shuffle을 쓰시면 됩니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | ArrayList<Integer> lotto = new ArrayList<Integer>(45); lotto.add(1);lotto.add(2);lotto.add(3);lotto.add(4);lotto.add(5); lotto.add(6);lotto.add(7);lotto.add(8);lotto.add(9);lotto.add(10); ..... lotto.add(36);lotto.add(37);lotto.add(38);lotto.add(39);lotto.add(40); lotto.add(41);lotto.add(42);lotto.add(43);lotto.add(44);lotto.add(45); Collections.shuffle(lotto); lotto_first=lotto.get(0); lotto_second=lotto.get(1); lotto_third=lotto.get(2); lotto_fourth=lotto.get(3); lotto_fifth=lotto.get(4); lotto_sixth=lotto.get(5); lotto_bonus=lotto.get(6); | cs |
int형 array를 45개를 만들고 거기다 1부터 45까지 넣어줍니다.
그리고 Collections.shuffle() method로 섞어준다음 하나씩 꺼내면 됩니다.
하지만 숫자가 많아지면 코드가 좀 길어지는 불편함이...
이 외에도 중복없이 랜덤변수 뽑아내는 몇가지 방법이 더 있습니다.
저는 이걸 쓰고있어서;;;^^
반응형
'Study > JAVA' 카테고리의 다른 글
JAVA EXE(실행파일)로 만들기(jsmooth) (0) | 2015.02.12 |
---|---|
eclipse에 JAVA swing plug-in 하기 (0) | 2015.02.12 |
JAVA SWING TCP/IP Client (0) | 2015.02.12 |
java SimpleDateFormat (0) | 2015.02.12 |
소수점 반올림(Math.round) (0) | 2015.02.11 |