[번호 추첨기] 자바로 제작한 랜덤 추첨 프로그램 @nhj12311 버전

in kr •  7 years ago  (edited)

안녕하세요.

Cobot 개발자 @nhj12311 입니다.

@kdj님의 이벤트에 참가하기 위해 소소하게 코드를 짜봤습니다~

package test;

import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.Random;
import java.util.Set;

public class 번호추첨기 {
    public static void 랜덤숫자출력하기( int 랜덤범위, int 출력갯수){       
        Set<Integer> 랜덤저장소 = new LinkedHashSet<Integer>(출력갯수);
        for( Random 랜덤유틸 = new Random() ; 랜덤저장소.size() < 출력갯수 && 랜덤저장소.size() < 랜덤범위 ;  )
            랜덤저장소.add(1 + 랜덤유틸.nextInt( 랜덤범위 ));
        
        Iterator<Integer> 저장소탐색기 = 랜덤저장소.iterator();
        for(int 인덱스 = 1 ; 저장소탐색기.hasNext() ; 인덱스++)         
            System.out.println( 인덱스 + "번째 생성된 수는 " + 저장소탐색기.next() + "입니다." );
    }
    
    public static void main(String[] args) {        
        번호추첨기.랜덤숫자출력하기(20, 3);
    }
}

원리는 간단합니다.
자바가 기본적으로 제공하는 LinkedHashMap 변경LinkedHashSet 이라는 녀석은
넣은 순서대로 데이터를 쌓으면서 key는 해시값을 사용하여 단일성을 유지하는 놈입니다.
따라서 key에 랜덤 숫자를 넣고 사이즈만 체크하는 방식을 썼습니다.
그리고 저위에 코드는 수행 가능한 코드이며
일부러 한글 변수명을 써보았습니다.
자바는 한글 변수명, 함수명을 쓸수 있답니다.
평가는 @kdj님이 잘해주시겠죵? ㅎㅎ

읽어주셔서 감사합니다~

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!
Sort Order:  

nice post

감사합니다~

  ·  7 years ago (edited)

저장소탐색기next() -> ((int)저장소탐색기.next() +1)
0이 출력되는 문제가 있습니다!
요렇게 하면 해결될 것 같습니다.

아 0은 안되나요? ㅎㅎ 몰랐네용

원본 게시글에서 https://steemit.com/kr/@kimdy/47saua
r = (int)rand()%input+1;부분 때문에 1~참가인원까지 출력될거에요.

고쳤습니다. 감사합니다~

  ·  7 years ago Reveal Comment

........

Python 에 이어 Java 도 등장하였군요...
Map 이 나오네요..

응모에 감사합니다.

이벤트 감사합니다. 저도 kr-dev가 더활성화되었으면 좋겠습니다

  ·  7 years ago (edited)

Map 과 Iterator 는 generics 를 써야 합니다.
안쓰면 컴파일러가 투덜댑니다.

그리고 출력갯수가 랜덤범위보다 크면 안끝나는 것 같습니다.

뜨끔... 바로 수정하였습니다. ㅠㅠ

번호추첨기.랜덤숫자출력하기(20, 3);
이 되어야 할 것 같은데요...

Map 보다는 Set 을 쓰는 것이 의미상 명확할 것 같습니다.

네 Set을 쓰면 쓸모없는 value값을 신경쓸 필요없겠네요~
이놈의 Map 사랑이 지나친가봅니다. ㅎㅎ 바로 수정~