IT/Java
[Java] 로또 번호 생성하기
hi.anna
2025. 3. 22. 06:48
Java로 로또 번호 생성하기
로또 번호(1~45 사이의 중복 없는 6개 숫자)를 생성하는 다양한 방법을 소개합니다.
1. Set을 이용한 중복 없는 로또 번호 생성 (기본 방법)
Set을 사용하면 중복을 자동으로 제거할 수 있어 로또 번호 생성에 적합합니다.
import java.util.HashSet;
import java.util.Random;
import java.util.Set;
public class LottoGenerator {
public static void main(String[] args) {
Random random = new Random();
Set<Integer> lottoNumbers = new HashSet<>();
while (lottoNumbers.size() < 6) {
lottoNumbers.add(random.nextInt(45) + 1); // 1~45 사이의 난수 생성
}
System.out.println("로또 번호: " + lottoNumbers);
}
}
출력 예시
로또 번호: [12, 45, 7, 23, 34, 29]
설명
- HashSet<Integer>를 사용하여 중복 없이 6개의 숫자를 저장.
- random.nextInt(45) + 1 → 1~45 범위의 난수를 생성.
- while 루프를 돌면서 Set에 6개 숫자가 모일 때까지 반복.
2. List와 Collections.shuffle()을 이용한 로또 번호 생성 (랜덤 섞기)
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class LottoShuffle {
public static void main(String[] args) {
List<Integer> numbers = new ArrayList<>();
// 1~45까지 숫자 리스트 생성
for (int i = 1; i <= 45; i++) {
numbers.add(i);
}
// 리스트 섞기
Collections.shuffle(numbers);
// 앞에서 6개 숫자 선택
List<Integer> lottoNumbers = numbers.subList(0, 6);
System.out.println("로또 번호: " + lottoNumbers);
}
}
출력 예시
로또 번호: [3, 25, 42, 19, 8, 33]
설명
- 1~45까지 숫자를 리스트에 추가.
- Collections.shuffle(numbers)를 이용해 리스트를 랜덤하게 섞음.
- subList(0, 6)를 사용해 처음 6개의 숫자 선택.
3. TreeSet을 이용한 정렬된 로또 번호 생성
import java.util.Random;
import java.util.Set;
import java.util.TreeSet;
public class LottoSorted {
public static void main(String[] args) {
Random random = new Random();
Set<Integer> lottoNumbers = new TreeSet<>(); // 자동 정렬되는 Set
while (lottoNumbers.size() < 6) {
lottoNumbers.add(random.nextInt(45) + 1);
}
System.out.println("정렬된 로또 번호: " + lottoNumbers);
}
}
출력 예시
정렬된 로또 번호: [3, 15, 22, 28, 34, 40]
설명
- TreeSet을 사용하면 자동으로 번호가 정렬됨.
- HashSet과 동일하게 중복을 자동으로 방지.
4. Java 8+ Stream API를 이용한 로또 번호 생성
import java.util.List;
import java.util.Random;
import java.util.stream.Collectors;
public class LottoStream {
public static void main(String[] args) {
List<Integer> lottoNumbers = new Random()
.ints(1, 46) // 1~45 사이의 무한 스트림 생성
.distinct() // 중복 제거
.limit(6) // 6개만 선택
.sorted() // 정렬
.boxed() // int -> Integer 변환
.collect(Collectors.toList());
System.out.println("Stream 로또 번호: " + lottoNumbers);
}
}
출력 예시
Stream 로또 번호: [5, 12, 23, 27, 38, 41]
설명
- ints(1, 46) → 1~45 범위의 난수 스트림 생성.
- .distinct() → 중복 제거.
- .limit(6) → 6개만 선택.
- .sorted() → 오름차순 정렬.
- .boxed() → int를 Integer로 변환.
- .collect(Collectors.toList()) → 리스트로 변환.
5. SecureRandom을 이용한 보안성이 높은 로또 번호 생성
import java.security.SecureRandom;
import java.util.Set;
import java.util.TreeSet;
public class SecureLotto {
public static void main(String[] args) {
SecureRandom secureRandom = new SecureRandom();
Set<Integer> lottoNumbers = new TreeSet<>();
while (lottoNumbers.size() < 6) {
lottoNumbers.add(secureRandom.nextInt(45) + 1);
}
System.out.println("보안 로또 번호: " + lottoNumbers);
}
}
출력 예시
보안 로또 번호: [4, 13, 22, 29, 37, 42]
설명
- SecureRandom은 일반 Random보다 예측 불가능한 난수를 생성.
- 보안이 중요한 경우(예: 복권 시스템, 암호화 키 생성) 사용.
반응형