본문 바로가기

프로젝트 & TIL/자바 토이 프로젝트

자바 토이 프로젝트 3 - 로또 번호 생성 프로그램

전체 코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        System.out.println("로또 번호 생성 프로그램을 시작합니다.");

        int answer = 0;
        while(true){
            System.out.println("로또 번호를 총 몇 번 생성하시겠습니까? (최소) : 1 / (최대) : 5");

            try {
                answer = Integer.parseInt(br.readLine());

                if(answer < 1 || answer > 5)
                    System.out.println("로또 번호는 최소 1번에서 최대 5번까지 생성 가능합니다.");
                else break;
            } catch(NumberFormatException e) {
                System.out.println("정확한 숫자를 입력해주세요. (최소) : 1 / (최대) : 5");
            }
        }

        for(int i=0; i<answer; i++){
            System.out.println("=".repeat(20));
            System.out.println("<< %d번째 로또 번호 >>".formatted(i + 1));

            StringBuilder sb1 = new StringBuilder();
            StringBuilder sb2 = new StringBuilder();
            List<Integer> lotto = new ArrayList<>();

            for(int j=0; j<6; j++){
                int number = (int) (Math.random() * 44 + 1);
                lotto.add(number);
            }

            for(int k=1; k<=45; k++){
                if(lotto.contains(k)){
                    sb1.append(k + " ");
                    sb2.append("■ ");
                } else sb2.append("□ ");
                if(k % 6 == 0) sb2.append("\n");
            }

            System.out.println(sb1);
            System.out.println(sb2);
            System.out.println("=".repeat(20));
        }

        System.out.println("로또 번호 생성 프로그램을 종료합니다.");

        br.close();
    }
}

  


진행 흐름

1. 프로그램 시작과 동시에 로또 번호를 생성할 횟수를 입력 받는다.

- 1 미만 5 초과의 숫자를 입력하거나, 숫자가 아닌 텍스트를 입력할 경우 안내와 함께 다시 입력 받는다.

  

        int answer = 0;
        while(true){
            System.out.println("로또 번호를 총 몇 번 생성하시겠습니까? (최소) : 1 / (최대) : 5");

            try {
                answer = Integer.parseInt(br.readLine());

                if(answer < 1 || answer > 5)
                    System.out.println("로또 번호는 최소 1번에서 최대 5번까지 생성 가능합니다.");
                else break;
            } catch(NumberFormatException e) {
                System.out.println("정확한 숫자를 입력해주세요. (최소) : 1 / (최대) : 5");
            }
        }

  

2-1. 입력 받은 횟수만큼 로또 번호 6개를 생성한다.

  

        for(int i=0; i<answer; i++){
            System.out.println("=".repeat(20));
            System.out.println("<< %d번째 로또 번호 >>".formatted(i + 1));

            StringBuilder sb1 = new StringBuilder();
            StringBuilder sb2 = new StringBuilder();
            List<Integer> lotto = new ArrayList<>();

            for(int j=0; j<6; j++){
                int number = (int) (Math.random() * 44 + 1);
                lotto.add(number);
            }

            ...
            
        }

  

2-2. 생성한 로또 번호를 숫자 및 로또 용지의 위치에 맞게 시각화한 이미지로 출력한다.

  

        for(int i=0; i<answer; i++){
            
            ...

            for(int k=1; k<=45; k++){
                if(lotto.contains(k)){
                    sb1.append(k + " ");
                    sb2.append("■ ");
                } else sb2.append("□ ");
                if(k % 6 == 0) sb2.append("\n");
            }

            System.out.println(sb1);
            System.out.println(sb2);
            System.out.println("=".repeat(20));
        }

  


실행 화면


  

* 입력 받은 값이 숫자가 아니거나 1 미만 5 초과의 숫자인 경우, 안내와 함께 다시 입력 받는다.

  


가위바위보 게임, 구구단 게임보다 구현이 훨씬 더 간단하고 쉬웠다.

입력 받는 값이 하나 뿐이고, 1과 5 사이의 숫자로 제한되어 있어서 그런 것 같다.

다음 번엔 로또 번호 구매 + 당첨 시뮬레이션을 적용한 프로그램을 만들어봐야겠다.