[JAVA] 로또번호 생성하는 프로그램 만들기
Taedi
·2021. 8. 8. 16:01
잡설
최근 자바를 배우면서 뭘 할 수 있을까 고민하다 간단하게 로또번호를 생성할 수 있는 코드를 작성해 보았습니다. Math.random() 을 활용해 1과 45사이의 번호를 생성하고, 리스트를 이용해 중복 여부를 판별하여 서로 다른 임의의 수 6개를 출력하였습니다.
Math.random()
Math.random()은 0 이상 1 미만인 임의의 실수를 반환하는데, 여기에 45를 곱하면 '0 <= n < 45' 의 값이 나오게 되고 1을 더해주면 '1<= n < 46' 범위의 값이 나오게 됩니다. (int) 로 형 변환(Casting) 하면 소수점 이하의 부분은 버려지는 특성을 이용하면 '1<= n <= 45' 범위의 정수를 얻을 수 있습니다.
list.contains()
로또번호는 동일하지 않은 6개의 숫자가 필요하기 때문에 중복된 수가 있는지 확인하기 위해 먼저 찾은 값을 리스트에 저장하고 새로 찾은 값이 기존의 리스트에 존재하는지 contains 메서드를 통해 확인하였습니다.
코드
import java.util.ArrayList;
// import java.util.Comparator;
public class LottoNumCreater {
public static void main(String[] args) {
funcLotto();
}
private static void funcLotto() {
int num; // 로또번호
ArrayList<Integer> lottoNums = new ArrayList<Integer>(6); // 로또번호 리스트
for (int i = 0; i < 6; ++i) {
for (;;) {
// 1 ~ 45 중 임의의 숫자 반환
num = (int) (Math.random() * 45 + 1);
// 중복 확인
if (lottoNums.contains(num)) {
continue;
} else {
lottoNums.add(num);
break;
}
}
}
// 출력
lottoNums.sort(null); // lottoNums.sort(Comparator.reverseOrder()); 역순
System.out.printf("로또 예상 번호는 %s 입니다!%n", lottoNums.toString());
}
}
리스트 자료는 아래의 방식으로도 출력이 가능하다.
import java.util.Iterator;
// 출력2 : for each 이용
for (int lotNum : lottoNums) {
System.out.print(lotNum + " ");
}
System.out.println();
// 출력3 : iterator 이용
Iterator<Integer> iterator = lottoNums.iterator();
while (iterator.hasNext()) {
System.out.print(iterator.next() + " ");
}
System.out.println();
출력결과
로또 예상 번호는 [4, 6, 9, 10, 27, 45] 입니다!
4 6 9 10 27 45
4 6 9 10 27 45
내용 중 틀린 부분이나 더 효율적인 방법이 있다면 저도 알려주세요! :-D
티스토리 아이디로 코멘트를 남기려면
여기를 눌러주세요!