자바를 사용해서 로또 번호를 생성하는 방법에 대해 이야기해보려고 합니다. 여기서는 두 가지 방법을 소개하려고 하는데요, 하나는 Math.random() 함수를 사용하는 방법이고, 다른 하나는 Collections.shuffle() 메서드를 사용하는 방법입니다.
먼저, Math.random() 함수는 0.0 이상 1.0 미만의 부동소수점 숫자를 무작위로 반환합니다. 이 숫자를 특정 범위의 정수로 변환하기 위해서는 추가적인 연산이 필요합니다. 예를 들어, 1부터 45까지의 랜덤한 정수를 얻기 위해선 아래와 같은 코드를 작성해야 합니다.
int number = (int)(Math.random() * 45) + 1;
이제 이를 이용해서 로또 번호를 생성해 보겠습니다.
package lotto;
public class lotto {
public static void main(String[] args) {
int[] lottoNumbers = new int[6];
for (int i=0; i<lottoNumbers.length; i++) {
int number = (int)(Math.random() * 45) + 1;
for (int j = 0; j < i; j++) {
if(lottoNumbers[j] == number) {
i--;
break;
}
}
lottoNumbers[i] = number;
}
System.out.println(" 로또 번호 출력 ");
System.out.println("=================");
for (int i=0; i<lottoNumbers.length; i++) {
System.out.print(lottoNumbers[i] + " ");
}
}
}
다음으로, Collections.shuffle() 메서드는 주어진 리스트의 요소를 무작위로 섞습니다. 이 메서드를 사용하면, 1부터 45까지의 숫자를 담은 리스트를 생성하고, 이를 섞어서 로또 번호를 생성할 수 있습니다.
이 방식은 Math.random() 함수를 사용하는 것보다 코드가 약간 더 길지만, 특정 범위의 모든 숫자를 한 번씩만 사용하고 싶을 때 유용하기 때문에, Math.random() 함수를 사용할때와 다르게 중복된 숫자를 확인하는 코드를 작성할 필요가 없습니다.
package lotto;
import java.util.ArrayList;
import java.util.Collections;
public class lotto {
public static void main(String[] args) {
ArrayList<Integer> numbers = new ArrayList<>();
for(int i = 1; i <= 45; i++) {
numbers.add(i);
}
Collections.shuffle(numbers);
System.out.println(" 로또 번호 출력 ");
System.out.println("=================");
for(int i = 0; i < 6; i++) {
System.out.print(numbers.get(i) + " ");
}
}
}
결국 두 방법 모두 무작위 숫자를 생성하는데 사용할 수 있지만, Math.random()은 단일 무작위 숫자를 생성하는 데에, Collections.shuffle()은 주어진 리스트의 요소를 무작위로 섞는 데에 각각 장점이 있습니다. 로또 번호를 생성하는 경우에는 후자가 더 적합한 방법일 수 있습니다.
추가적으로, 사용자로부터 원하는 로또 번호 생성 횟수를 입력받아, 그 숫자만큼 로또 번호를 생성해주는 기능을 추가해 보았습니다. 이 코드는 java.util.Scanner 클래스를 사용하여 사용자의 입력을 받습니다.
package lotto;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;
public class lotto {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("로또 번호를 몇 번 생성하시겠습니까? ");
int repeatTimes = sc.nextInt();
System.out.println(" 로또 번호 출력 ");
System.out.println("=================");
for (int i=1; i <= repeatTimes; i++) {
ArrayList<Integer> numbers = new ArrayList<>();
for(int j = 1; j <= 45; j++) {
numbers.add(j);
}
Collections.shuffle(numbers);
System.out.print("[" + i + "] ");
for(int j = 0; j < 6; j++) {
System.out.print(numbers.get(i) + " ");
}
System.out.println("\n");
}
sc.close();
}
}