어제 오늘 내일

[Java] 로또 번호 생성하기 본문

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. 1~45까지 숫자를 리스트에 추가.
  2. Collections.shuffle(numbers)를 이용해 리스트를 랜덤하게 섞음.
  3. 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]

설명

  1. ints(1, 46) → 1~45 범위의 난수 스트림 생성.
  2. .distinct() → 중복 제거.
  3. .limit(6) → 6개만 선택.
  4. .sorted() → 오름차순 정렬.
  5. .boxed() → int를 Integer로 변환.
  6. .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보다 예측 불가능한 난수를 생성.
  • 보안이 중요한 경우(예: 복권 시스템, 암호화 키 생성) 사용.

 

 

반응형
Comments