본문 바로가기
Java

자바 Random() 함수를 이용하여 로또생성 프로그램 만들기

by 오늘이 내가 된다. 2022. 1. 5.

다음은 로또번호를 생성하는 프로그램이다.

개인적으로 로또를 사면 크게 한방을 노리기 위해 만원어치를 사는 편이다.

따라서 while(count<10)을 통해 10번의 case를 만들었다.

import java.util.Random;

public class Test {

	public static void main(String[] args) {
		Test ts = new Test();
		ts.test();
		// Random 클래스의 인스턴스를 생성
	}
	public void test() {
		System.out.println("test");
		Random rm = new Random();
		int count=0;
		
		// case 10개를 생성
		while(count<10) {
		//  1~45까지의 수 6개를 생성하는 코드를 작성
		for(int i=0; i<7; i++) {
		int rand = rm.nextInt(45)+1;
		if(i==6) {
			System.out.println("\n2등 보너스 당첨번호는 : " + rand + "입니다");
			System.out.println();
		}
		else 
			System.out.print(rand + " ");
		}
		count++;
		}
	}
}

위와 같이 코드를 작성하면 완전한 로또번호를 생성할 수 없다.

왜냐하면 Random()함수는 같은 조건으로 반복문을 진행하기 때문에 중복을 반영하게 된다.

따라서 나왔던 번호가 또 다시 나올 수도 있다는 결함이 있다.

더보기
더보기
중복 숫자 발생

 

 

중복을 허용하지 않는 코드를 작성해보자

import java.util.Random;

public class Test2 {

	public static void main(String[] args) {
		Test2 ts = new Test2();
		ts.test2();
		// Random 클래스의 인스턴스를 생성
	}

	public void test2() {
		System.out.println("test");
		Random rm = new Random();
		int count = 0;
		int[] rand = new int[7];
		// case 10개를 생성
		while (count < 10) {
			// 1~45까지의 수 6개를 생성하는 코드를 작성 (+2등 당첨번호)
			for (int i = 0; i < 7; i++) {
				rand[i] = rm.nextInt(45) + 1;
				for (int j = 0; j < i; j++) {
// rand[0] 과 rand[1] 이 같은 값이 나온다면 rand[1]을 rand[0]으로 돌려서 새로운 값 할당 
					if (rand[i] == rand[j]) {
						i--;			
						break;
					}
				}
			}
			for (int i = 0; i < 7; i++) {
				if (i == 6) {
					System.out.println("\n2등 보너스 당첨번호는 : " + rand[i] + "입니다");
					System.out.println();
				} else
					System.out.print(rand[i] + " ");
			}
			count++;
		}
	}
}
더보기
더보기
중복제거

 

중복을 제거하기 위한 코드이다.

for (int i = 0; i < 7; i++) {
	rand[i] = rm.nextInt(45) + 1;
	for (int j = 0; j < i; j++) {
		if (rand[i] == rand[j]) {
			i--;
            		break;
			}
		}			
}
  • rand[0]에 랜덤 값을 넣는다. (i = 0)
  • j = 0; j < 0 이므로 다음 i의 반복을 실행한다.
  • rand[1]에 랜덤 값을 넣는다. (i = 1)
  • j = 0; j < 1 이므로 j 반복을 1번 실행한다.
  • 이때 rand[1] == rand[0] 이라면 (i = 1 / j = 0)
    • i를 감소시키고 j 반복문을 빠져 나온다. (i = 0)
  • 다시 i 반복문을 실행하려고 할때 i = 1이 되었다.
    • rand[1]에 랜덤 값을 넣는다. (i = 1)
  • j = 0; j < 1 이므로 j 반복을 1번 실행한다.
  • rand[1] == rand[0] 조건을 만족하지 않으면 i 반복문이 실행된다.

 

댓글