Java

Java, Lotto 프로그램 - 자동 번호(중복된 값 제외, 오름차순, 줄바꿈)

greenyellow-s 2024. 7. 10. 13:59

Lotto.java

 

 

[문제] 로또 프로그램 - 자동 번호
1. 1~45까지의 정수형 값을 가진 6개의 배열이다.
2. 중복된 숫자를 가지면 안된다.
3. 오름차순
4. 1줄당 1000원
5. 출력 시 6자리로 맞춘다.
7. 5줄 마다 줄바꿈

package array;

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

public class Lotto {

	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
        
        //1. 1~45까지의 정수형 값을 가진 6개의 배열이다.
		int[] lotto = new int[6];
		
		int money=0;
		int count=0;
		
		System.out.print("계산 : ");
		int a = scan.nextInt();
		
        // 4. 1줄당 1000원(나와야 되는 줄의 개수)
		money = (int)(a/1000);
		
		for(int k=0; k<money; k++) {
			count++; // 실행 count
			
			 // 난수 발생
			for(int i=0; i<lotto.length; i++) {
				lotto[i] = (int)(Math.random()*45+1);
				 // 2. 중복된 숫자를 가지면 안된다.(중복 체크)
				for(int j=0; j<i; j++) {
					if(lotto[i] == lotto[j]) {
						i--;
						break;	
					}
				} 
			}
			// 3. 오름차순
			Arrays.sort(lotto); // java.util.Arrays; 추가
			for(int data : lotto) {
				System.out.print("\t"+data);
			}
            // 5. 출력시 5자리로 맞춘다.
			System.out.println();
			
            // 7. 5줄 마다 줄바꿈
			if(count%5==0) System.out.println();
			
		}
	}

}

[실행결과]
돈 입력 : 5000
2 4 19 39 43 44
22 26 33 38 39 42
5 6 8 25 45 25


중복 체크

 

현재 나와있는 숫자가 앞에 숫자들과 똑같은게 있는지 비교해야된다.

비교 방법
가면서 점점 줄어드는 selection sort와는 반대로  lotto는 점점 늘어난다.


selection sort의 반복 조건에는 마지막 데이터가 없는데 lotto는 마지막 데이터까지 실행해야된다.

selection sort ==> i < ar.length-1
lotto ==>  i < ar.length

 


현재 숫자와 앞에 숫자들 비교
if(lotto[i] == lotto[j]) 
        i               j
lott[0]
lott[1] == lott[0]
lott[2] == lott[0] / lott[2] == lott[1]
lott[3] == lott[0] / lott[3] == lott[1] / lott[3] == lott[2]
.

.
lott[5] == lott[0] / lott[5] == lott[1] / ... / lott[5] == lott[4]

j 는 매번 0 부터 i-1까지 반복한다.
따라서, for(int j=0; j<i; j++) 로 조건 설정한다.

만약, [앞 숫자들 = 새로 발생한 난수] 일때, (숫자가 중복된 경우)

break로 for문( for(int j=0; j<i; j++) )을 빠져나온다.

하지만 ,
for(int i=0; i<lotto.length; i++)로 다시 갔을 때 i 가 자동으로 증가해서 lotto[i]에 값이 입력되지 않은 상태lotto[i+1]에 데이터를 입력하기 시작한다.
따라서, i--; 구문을 입력해서 앞에 수와 비교했을 때 같은 수가 나왔던 i 번째 데이터를 다시 구한다.

for(int i=0; i<lotto.length; i++) {
    lotto[i] = (int)(Math.random()*45+1);
     // 중복 체크
    for(int j=0; j<i; j++) {
        if(lotto[i] == lotto[j]) {
            i--;
            break;	
        }
    } 
}

 

 

5줄마다 구분하기 (띄어쓰기)

 

if(count%5==0) System.out.println();


번호 6개를 출력하는 for문 진행한 횟수변수 count에 저장하고


그 값을 5로 나누었을 때 0이 된 줄에 띄어쓰기 추가하면 된다.