JAVA/JAVA BASIC

3/21 Homework 로또생성기

아잠만_ 2024. 3. 22. 11:43
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Random;
import java.util.Scanner;

public class HomeWork13 {
	// 로또 길이
	int length = 8;
	// 당첨되는 숫자 범위-1 (1부터 시작하므로 -1한 값)
	int selNum = 44;
	// 당첨되야되는 숫자 갯수
	int winNum = 6; 
	
	Scanner sc = new Scanner(System.in);
	int money = 100000;

	public static void main(String[] args) {
		HomeWork13 hw = new HomeWork13();
		hw.process();
	}

	public void process() {
		int[] round = round();
		while (true) {
			System.out.println("1. 로또 구매");
			System.out.println("2. 종료");

			int sel = sc.nextInt();
			if (sel == 1) {
				System.out.println("현재 잔액 : "+money);
				System.out.println("구입할 로또 금액");
				int buy = sc.nextInt();
				// buy > money 값보다 클 경우 구매 못한다는 메세지
				if (buy > money) {
					System.out.println("잔액이 부족합니다.");
					// 구매할 경우 money에서 금액 차감.
				} else {
					money -= buy + buy % 1000;
					System.out.println("거스름돈 : " + buy % 1000);
					System.out.println("구입한 로또");
					int[][][] bundle = lottoBundle(buy);
					printLotto(bundle);

					System.out.println("이번 회차 당첨번호");
					System.out.println(Arrays.toString(round));
					System.out.println("-----------------------------------");
					// 비교 (for문 / equals사용)
					// 총 당첨번호 갯수 배열 전체를 파악하고싶어서 추가
					ArrayList <Integer> count = new ArrayList<>();
					
					for (int k = 0; k < bundle.length; k++) {
						for (int j = 0; j < bundle[k].length; j++) {
							int sum = 0;
							for (int i = 0; i < round.length; i++) {
								if (round[i] == bundle[k][j][i]) {
									sum++;
								}
								}
							if(sum==winNum) {
								System.out.println("당첨되었습니다.");
								System.out.println("당첨금 100000원 입금되었습니다");
								money+=100000;
							}
							//Arraylist 배열 추가
							count.add(sum);
						}
					}
					//Arraylist 배열 출력
					System.out.println("일치하는 숫자");
					for(int num : count) {
						System.out.print(num+" ");
					}
					System.out.println();
				}
				// 구매한 로또와 이번회차 당첨 번호가 일치할 시 상금 지급
				// 상금 100000
				// 로또 번호는 총 8개
			}
			if (sel == 2) {
				break;
			}
		}

	}

	// 이번 회차 로또 당첨 번호
	public int[] round() {
		int[] round = lottoNum();
		return round;
	}

	// 번호 1줄 출력
	public int[] lottoNum() {
		int[] lotto = new int[length];
		for (int num = 0; num < lotto.length; num++) {
			//1~45번 출력
			int r = new Random().nextInt(selNum)+1;
			lotto[num] = r;
			for (int i = 0; i < num; i++) {
				if (lotto[num] == lotto[i]) {
					num--;
					break;
				}
			}
		}
		Arrays.sort(lotto);
		return lotto;
	}

	// num줄 출력
	public int[][] lottoPaper(int num) {
		int[][] paper = new int[num][length];
		for (int row = 0; row < num; row++) {
			paper[row] = lottoNum();
		}
		return paper;
	}

	// 5줄 출력
	public int[][] lottoPaper() {
		return lottoPaper(5);
	}

	// 1장 출력
	public int[][][] lottoBundle(int buy) {
		int papers = buy / 5000;
		if (buy % 5000 != 0)
			papers++;
		int[][][] bundle = new int[papers][5][length];
		for (int i = 0; i < bundle.length; i++) {
			bundle[i] = lottoPaper();
		}
		// 나머지가 있는경우 마지막장 재생성
		if (buy % 5000 != 0) {
			bundle[bundle.length - 1] = lottoPaper((buy % 5000) / 1000);
		}
		return bundle;
	}

	// 로또 출력
	public void printLotto(int[][][] bundle) {
		for (int i = 0; i < bundle.length; i++) {
			System.out.println("==================================");
			int[][] paper = bundle[i];
			for (int j = 0; j < paper.length; j++) {
				int[] lotto = paper[j];
				System.out.println(Arrays.toString(lotto));
			}
			System.out.println("==================================");
		}
	}

}