2007년 12월 14일
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)
2007년 12월 12일
로또생성기 java로 만들어보기
javaservice.net에서 보고 저도 한번 짜봤어요.
문제
- 1부터 45까지의 숫자 중에 6개를 뽑는다.6개의 값이 다 달라야 한다.
- java.util.Random를 이용해서 임의의 값을 구한다.
- 출력시 작은 숫자부터 순서대로 출력
저의 풀이
간단하게 짠다면 일단 저는 아래와 같이 해보고 싶어요. (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();
}
}
짧은 코드보다는 알아보기 좋은 코드를 짜고 싶다는 말을 할려고 고쳐봤는데..글쎄요; 바뀐 코드가 더 눈에 잘 들어온다는 확신이 들지는 않네요 ^^;
◀ 이전 페이지 다음 페이지 ▶



