✅ 문제

// 1. 로또 자동 생성 만들기!
// 2. 로도 수동 생성 만들기!
// 3. 내 로또 번호 보기 (Load)
// 4. 종료!

✅ 해결방법

  • 번호 자동으로 받기를 선택하면 중복값이 나오게 되는데, 중복되지 않는 수를 받기!
  • 사용자로부터 수동으로 번호를 입력 받게 되면 , " 1~45 숫자 범위 & 중복 값 "이 나오면 다시 입력받게 하기
  • 자동, 수동으로 로또번호를 받고 데이터로 따로 저장한 후 불러오기하면 보일 것!

✅ 코드

package 방과후연습용.Jin;

import java.io.*;
import java.nio.charset.Charset;
import java.util.Random;
import java.util.Scanner;
import java.util.SplittableRandom;

public class EX_0628_Program {
    public static void main(String[] args) throws IOException {
        //lottos[0][] -> 번호 자동생성, lottos[1][] -> 번호 수동생성
        final int auto = 0;
        final int manual = 1;

        int[][] lottos = new int[2][6];

        Scanner scan = new Scanner(System.in);
        Random rand = new Random();

        QUIT:
        while (true) {
            System.out.println("┌───────────────────────────┐");
            System.out.println("      Lotto 관리 프로그램     ");
            System.out.println("└───────────────────────────┘");
            System.out.println();

            System.out.println("1. 번호 자동 생성");
            System.out.println("2. 번호 수동 생성");
            System.out.println("3. 내 로또 번호 보기");
            System.out.println("4. 종료");
            System.out.print("선택 >");
            int menu = scan.nextInt();


            switch (menu) {
                case 1: {
                    System.out.println("┌───────────────────────────┐");
                    System.out.println("     Lotto 번호 자동 생성     ");
                    System.out.println("└───────────────────────────┘");
                    System.out.println("┌───────────────────────────┐");
                    System.out.println("          로또 번호           ");
                    System.out.println("└───────────────────────────┘");
                    System.out.println();

                    //랜덤한 값 추출 & 중복제거
                    {
                        for (int i = 0; i < 6; i++) {
                            lottos[auto][i] = rand.nextInt(45) + 1;//Random(45)는 0~44까지의 범위를 만든다. 그래서 +1
                            for (int j = 0; j < i; j++) {
                                if (lottos[auto][i] == lottos[auto][j])
                                    i--;
                            }
                        }
                    }

                    //추출한 값 작은 숫자부터 정렬(선택정렬)
                    {
                        for (int i = 0; i < 6 - 1; i++) {
                            int minIndex = i;
                            for (int j = 0; j < (6 - 1) - i; j++) {
                                if (lottos[auto][minIndex] > lottos[auto][j + 1 + i])
                                    minIndex = i + j + 1;
                            }
                            int temp = lottos[auto][i];
                            lottos[auto][i] = lottos[auto][minIndex];
                            lottos[auto][minIndex] = temp;
                        }
                    }
                    //로또 출력
                    {
                        for (int j = 0; j < 6; j++)
                            System.out.printf("(%d) ", lottos[auto][j]);
                    }
                    System.out.println();


                    System.out.println("\n1. 저장하고 메인메뉴로 가기");
                    System.out.println("2. 취소하고 메인메뉴로 가기");
                    System.out.print(">_ ");

                    int meun2 = scan.nextInt();

                    switch (meun2) {
                        case 1: {
                            System.out.print("\n저장했습니다.");
                            FileOutputStream fos = new FileOutputStream("JavaPrj/res/ALottos_save.txt");
                            PrintWriter fout = new PrintWriter(fos, true, Charset.forName("UTF-8"));

                            for (int i = 0; i < 6; i++)
                                fout.printf("%d ", lottos[auto][i]);

                            fout.println();

                            fout.close();
                            fos.close();
                            System.out.println();
                            break;
                        }
                        case 2: {
                            System.out.println("저장하지 않고 메인 메뉴로 돌아갑니다.");
                            break;
                        }
                    }

                    break;
                }
                case 2: {
                    System.out.println("┌───────────────────────────┐");
                    System.out.println("     Lotto 번호 수동 생성     ");
                    System.out.println("└───────────────────────────┘");

                    Scanner scan1 = new Scanner(System.in);

                    boolean onOff = true;

                    AGAIN:
                    do {
                        //사용자의 입력값을 한줄로 받아옴.
                        System.out.println("    1 ~ 45 숫자를 입력하세요  ");
                        System.out.println("    예) 1 2 23 24 28 45     ");
                        System.out.print("입력 > ");

                        //문자열로 한번에 받아옴.
                        String input = scan1.nextLine();
                        String[] arr = input.split(" ");

                        //문자열로 받아온 숫자를 정수로 변환해줌.
                        for (int i = 0; i < 6; i++)
                            lottos[manual][i] = Integer.valueOf(arr[i]);

                        //입력범위 설정
                        for (int j = 0; j < 6; j++)
                            if ((lottos[manual][j] < 1 || 45 < lottos[manual][j])) {
                                System.out.println("\n   1~ 45 범위의 숫자를 입력하세요.");
                                continue AGAIN;
                            }


                        //중복제거
                        {
                            for (int i = 0; i < 6; i++) {
                                for (int j = 0; j < i; j++) {
                                    if (lottos[manual][i] == lottos[manual][j]) { // 중복 검사
                                        System.out.println("\n     중복된 요소가 있습니다! ");
                                        continue AGAIN;
                                    }
                                }
                            }
                            //i 0 |  1 |  2  |   3   |    4    |     5
                            //j - |  0 | 0 1 | 0 1 2 | 0 1 2 3 | 0 1 2 3 4
                        }
                        System.out.println("\n1. 저장하고 메인메뉴로 가기");
                        System.out.println("2. 취소하고 메인메뉴로 가기");
                        System.out.print(">_ ");

                        int meun2 = scan.nextInt();

                        switch (meun2) {
                            case 1: {
                                System.out.print("\n저장했습니다.");
                                FileOutputStream fos = new FileOutputStream("JavaPrj/res/MLottos_save.txt");
                                PrintWriter fout = new PrintWriter(fos, true, Charset.forName("UTF-8"));

                                for (int i = 0; i < 6; i++)
                                    fout.printf("%d ", lottos[manual][i]);
                                fout.println();

                                fout.close();
                                fos.close();
                                System.out.println();
                                break;
                            }
                            case 2: {
                                System.out.println("저장하지 않고 메인 메뉴로 돌아갑니다.");
                                break;
                            }
                        }
                        onOff = false;
                    } while (onOff);

                    break;

                }
                case 3: {
                    FileInputStream fis = new FileInputStream("JavaPrj/res/ALottos_save.txt");
                    FileInputStream fis1 = new FileInputStream("JavaPrj/res/MLottos_save.txt");
                    Scanner sc = new Scanner(fis);
                    Scanner sc1 = new Scanner(fis1);

                    System.out.println("┌───────────────────────────┐");
                    System.out.println("      로또를 불러옵니다...      ");
                    System.out.println("└───────────────────────────┘");
                    System.out.println();

                    String autoLotto = sc.nextLine();
                    String manualLotto = sc1.nextLine();

                    sc1.close();
                    sc.close();
                    fis1.close();
                    fis.close();

                    System.out.printf("자동 로또번호 %s\n", autoLotto);
                    System.out.printf("수동 로또번호 %s\n", manualLotto);

                    break;
                }
                case 4: {
                    System.out.println("종료");
                    break QUIT;
                }
                default:
                    System.out.println("1~4값만 입력하세요.");

            }
        }//end while
    }
}

🔥어려웠던 점🔥

  • 사용자로부터 입력값을 "nextLine();"으로 받아오면 String 배열split(메서드)로 하나씩 담아주는 작업 
  • String으로 받아온 값을 int형으로 변환해주는 작업.
//중복제거
{
    for (int i = 0; i < 6; i++) {
        for (int j = 0; j < i; j++) {
            if (lottos[manual][i] == lottos[manual][j]) { // 중복 검사
                System.out.println("\n     중복된 요소가 있습니다! ");
                continue AGAIN;
            }
        }
    }
    //i 0 |  1 |  2  |   3   |    4    |     5
    //j - |  0 | 0 1 | 0 1 2 | 0 1 2 3 | 0 1 2 3 4
}
  • 사용자로부터 입력 받은 값중복 제거 해주는 작업이 제일 어려웠다.

+ Recent posts