[Java] 자바 로또 프로그램 만들기

자바(JAVA)

[Java] 자바 로또 프로그램 만들기

 

환경 : windows 7 64bit, Eclipse Mars

 

로또 프로그램의 핵심은 랜덤으로 값을 추출하는 방법을 아는 것입니다. 로또 번호는 1~45까지 있죠. 이중에서 6가지만 랜덤으로 추출하면 되는데 Math.random() 함수와 Collections.shuffle() 함수를 이용해서 만들어 보겠습니다.

 

▼ 자바에서 Math.random() 함수는 0.0 이상에서 1.0 미만의 double 형 실수값을 반환합니다. 그렇다는 말은 1 미만의 소수점 값이 리턴되게 되는데 여기에 로또 번호를 추출할려면 45를 곱한뒤 +1 을 더합니다. Collections.shuffle() 함수는 인수로 List 객체를 받습니다. List 안에 1부터 45까지의 값을 집어넣고 Collections.shuffle() 넘기시면 무작위로 값을 하나씩 꺼낼수 있는 것이죠.

 

1. Collections.shuffle() 이용한 로또 번호 추출하기

 

▼ 프로그램의 진행은 로또 번호를 몇 개 뽑아낼 것인지 묻습니다. 그러면 입력한 숫자 만큼 번호를 추출하게 됩니다. for 문을 이용해서 List 객체에 번호들을 모두 추가합니다. 추가후 Collections.shuffle() 함수의 인수로 넘기게 되면 자동으로 섞어줍니다. 그럼 리스트 안에는 섞은 값이 차례대로 추가 되어 있을 겁니다. 이것을 하나씩 꺼내시면 되겠죠. 이렇게 꺼낸 값을 숫자의 숫서대로 정렬하기 위해 Array.sort() 함수를 이용했습니다.

 

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;

public class Lotto {

	public static void main(String[] args) {

		Lotto lotto = new Lotto();
		Scanner sc = new Scanner(System.in);

		System.out.print("로또번호 추출 개수 입력: ");
		int gameCnt = sc.nextInt();

		for (int i = 1; i <= gameCnt; i++) {
			System.out.println(
					i + "번째 로또번호: " + lotto.lottoNumbers());
		}
	}

	String lottoNumbers() {

		List<Integer> lottoNum = new ArrayList<Integer>();
		
		// List 안에 로또번호 추가 
		for (int i = 1; i <= 45; i++) {
			lottoNum.add(i);
		}

		// set안의 수를 무작위로 섞는다
		Collections.shuffle(lottoNum);

		int[] lottoNums = new int[6];
		for (int i = 0; i < 6; i++) {
			lottoNums[i] = lottoNum.get(i);
		}
		
		// 정렬
		Arrays.sort(lottoNums);

		return Arrays.toString(lottoNums);
	}
}
// 결과 
로또번호 추출 개수 입력: 3
1번째 로또번호: [7, 18, 31, 35, 37, 40]
2번째 로또번호: [2, 23, 25, 27, 32, 39]
3번째 로또번호: [11, 14, 34, 40, 43, 44]

 

2. Math.random() 을 이용해서 로또번호 추출

 

▼ 이번에는 Math.random() 함수를 이용하였습니다. 내용을 보시면 Collections.shuffle() 이용한 것보다 좀더 심플하죠. Math.random() 함수에서 0.0 ~ 1.0 사이의 소수점 double 값을 리턴하게 되는데 45 를 곱하고 1을 더하게 되면 1~45 값중 하나가 되는 것입니다. 이렇게 추출한 값을 int 배열에 넣고 Arrays.sort() 함수로 순서를 정렬합니다.

 

import java.util.Arrays;
import java.util.Scanner;

public class Lotto {

	public static void main(String[] args) {

		Lotto lotto = new Lotto();
		Scanner sc = new Scanner(System.in);

		System.out.print("로또번호 추출 개수 입력: ");
		int gameCnt = sc.nextInt();

		for (int i = 1; i <= gameCnt; i++) {
			System.out.println(
					i + "번째 로또번호: " + lotto.lottoNumbers());
		}
	}
	
	String lottoNumbers() {

		int[] lottoNums = new int[6];

		for(int i=0; i<=5; i++){
			lottoNums[i] = (int) (Math.random()*45+1);
		}
		
		// 정렬
		Arrays.sort(lottoNums);

		return Arrays.toString(lottoNums);
	}
}

 

 

3. 중복 제거를 위해 Set 컬렉션 사용

 

중복을 방지하기 위해서 다음과 같이 함수를 lottoNumbers() 함수를 수정하였습니다. Set 컬렉션 클래스를 사용하시면 됩니다. Set 에서 Add 함수로 값을 추가할 때 중복된 데이터는 들어가지 않습니다. 그러니까 Set 컬렉션의 전체 개수가 6이 될 때 까지 While 문을 이용해 계속 반복시키는 것이죠.  

 

import java.util.ArrayList; import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Scanner; import java.util.Set; public class Lotto2 { public static void main(String[] args) { Lotto2 lotto = new Lotto2(); Scanner sc = new Scanner(System.in); System.out.print("로또번호 추출 개수 입력: "); int gameCnt = sc.nextInt(); for (int i = 1; i <= gameCnt; i++) { System.out .println(i + "번째 로또번호: " + lotto.lottoNumbers()); } } String lottoNumbers() { Set<Integer> set = new HashSet<Integer>(); while( set.size() < 6){ Double d = Math.random() * 45 + 1; set.add(d.intValue()); } List<Integer> list = new ArrayList<Integer>(set); Collections.sort(list); return list.toString(); } }

저작자 표시 비영리 변경 금지
신고
Posted by 녹두장군