Egloos | Log-in


2007년 12월 전체 글 목록

shuffle을 이용한 로또생성기

 바로 아래 포스팅에서 간단한 로또생성기 코드를 만들어봤었죠. (http://benelog.egloos.com/1642193).

 같은 문제에 대한 dak99님의 풀이(http://dak99.egloos.com/3529054)를 보고 다시 다른 버전을 만들어봤어요.

 shuffle을 이용해도 Collections의 메소드들을 불러서 쓰니 코드가 별로 안 복잡해 지는군요.

 

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class LottoMachine {
    public static void main(String[] args) {
        List<Integer> numberCards = new ArrayList<Integer>();
        for(int i=1;i<=45;i++) numberCards.add(i);
        Collections.shuffle(numberCards);
        List<Integer> picked = numberCards.subList(0,5);
        Collections.sort(picked);
        System.out.println(picked);
    }
}

 

변수이름은 아직 마음에 안 드는데 더 고민할 시간이 없어서 그냥 올려요. n이 클수록 속도차이가 클겁니다.

by 정상혁 | 2007/12/14 19:02 | 코드,그냥 재미로 | 트랙백 | 덧글(0)

로또생성기 java로 만들어보기

 

javaservice.net에서 보고 저도 한번 짜봤어요.

( 원글: http://www.javaservice.net/~java/bbs/read.cgi?m=resource&b=qna2&c=r_p&n=1196139164&p=3&s=t#1196139164 )

 

문제

  1. 1부터 45까지의 숫자 중에 6개를 뽑는다.6개의 값이 다 달라야 한다. 
  2.  java.util.Random를 이용해서 임의의 값을 구한다.
  3. 출력시 작은 숫자부터 순서대로 출력 

 

 

 

 


저의 풀이

 간단하게 짠다면 일단 저는 아래와 같이 해보고 싶어요. (generics와 auto-boxing을 활용했으니 java5)

import java.util.Random;
import java.util.SortedSet;
import java.util.TreeSet;
public class LottoMachine1 {
    public static void main(String[] args) {
        SortedSet<Integer> pickedNumbers = new TreeSet<Integer>();
        Random random = new Random();
        while(pickedNumbers.size()< 6) pickedNumbers.add(random.nextInt(45)+1);
        System.out.println(pickedNumbers);
    }
}

 

그리고 아마 프로젝트에서 짠다면,  알아보기 쉽게 하기 위해서 아래와 같이 바꾸었을 것 같아요.

import java.util.Random;
import java.util.SortedSet;
import java.util.TreeSet;

public class LottoMachine {
    private int maxNumber;
    private int pickedNumbersCount;
    private Random random = new Random();
   
    public LottoMachine(int maxNumber, int pickedNumbersCount){
        this.maxNumber = maxNumber;
        this.pickedNumbersCount = pickedNumbersCount;
    }

    public void pick() {
        SortedSet<Integer> pickedNumbers = new TreeSet<Integer>();
        while(pickedNumbers.size() < pickedNumbersCount ){
            int pickedNumber = random.nextInt(maxNumber)+1;
            pickedNumbers.add(pickedNumber);
        }
        System.out.println(pickedNumbers);
    }
    public static void main(String[] args) {
        LottoMachine machine = new LottoMachine(45,6);
        machine.pick();
        machine.pick();
    }   
}

 

짧은 코드보다는 알아보기 좋은 코드를 짜고 싶다는 말을 할려고 고쳐봤는데..글쎄요; 바뀐 코드가  더 눈에 잘 들어온다는 확신이 들지는 않네요 ^^;

by 정상혁 | 2007/12/12 17:07 | 코드,그냥 재미로 | 트랙백 | 핑백(1) | 덧글(2)

◀ 이전 페이지          다음 페이지 ▶