오늘(사실 어제)은 랜덤 숫자를 생성하는 법을 배워 이를 통해 로또 번호 생성기를 만들어보았다.
랜덤 숫자는 random 클래스를 이용해서 생성할 수 있는데, 생성하는 법은 다음과 같다.
Random random = new Random(); //랜덤 객체 생성
random.nextInt(); //소괄호안에 최댓값+1을 적어준다.
random.nextInt(num);
로 작성하면 범위는 0이상 num
미만인 수가 랜덤으로 나오게 된다.
로또 숫자 생성기의 특징은 다음과 같다.
- 1~45까지의 숫자 6개가 랜덤으로 나올 것
- 중복인 숫자가 없을 것
- 출력은 "이번 주 로또 번호는 1 2 3 4 5 6 입니다." 형태로 뽑을 것
숫자 6개를 뽑아 컬렉션에 넣어 이를 출력하면 되는데, 중복이 없어야 하기때문에 Hashset를 사용하기로 했다.
Set<Integer> lotto = new HashSet<Integer>();
그리고 while문을 사용해 숫자를 6개 뽑았다.
(처음에 for 문으로 반복을 6번 돌렸는데, set의 경우 중복이 나오면 숫자가 6개 미만으로 떨어질 수 있기 때문에 while문으로 바꾸었다.)
이 때, random문은 0부터 숫자를 뽑기 때문에 뒤에 +1을 더해 컬렉션에 넣어주었다.
Random random = new Random();
while(lotto.size()<6){
lotto.add(random.nextInt(45)+1);
}
가장 어려웠던 부분은 의외로 출력 부분이었다.
그냥 출력하자니 대괄호에 묶여 나올 것이고 향상된 for 문을 돌려 숫자를 뽑아 앞 뒤에 문자를 넣자니 개행이 계속 될 것 같았다.
그러다 갑자기 전에 print();
와 println();
의 차이를 공부했던 게 생각났다.
항상 습관적으로 sout
에서 자동완성되는 System.out.println();
의 형식에 익숙해져있다보니 개행이 되지 않는 print();
을 사용할 수 있다는 것을 까먹은 것이다.
그래서 최종적으로 System.out.print();
을 사용해 무사히 로또 번호 생성기를 완성할 수 있었다.
import java.util.*;
public class Main {
public static void main(String[] args) {
Random random = new Random();
Set<Integer> lotto = new HashSet<Integer>();
while(lotto.size()<6){
lotto.add(random.nextInt(45)+1);
}
System.out.print("이번주 로또 번호는 ");
for (Integer lottoList: lotto){
System.out.print(lottoList+" ");
}
System.out.println("입니다");
}
}