자바를 사용한 로또 번호 생성기: Math.random() vs Collections.shuffle()

자바를 사용한 로또 번호 생성기: Math.random() vs Collections.shuffle()


자바를 사용해서 로또 번호를 생성하는 방법에 대해 이야기해보려고 합니다. 여기서는 두 가지 방법을 소개하려고 하는데요, 하나는 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();
    }
}

Posts created 242

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

Related Posts

Begin typing your search term above and press enter to search. Press ESC to cancel.

Back To Top

원활한 서비스 이용을 위한 안내

현재 광고 차단 프로그램이 켜져 있습니다. 이로 인해 사이트의 일부 기능이 제한될 수 있으니, 쾌적한 이용을 위해 광고 차단 해제 후 새로고침 부탁드립니다.