Java 응용 | 광기의 콘솔게임(?)

Dalyume·2026년 7월 23일

Java 응용

목록 보기
4/15
post-thumbnail

사용한 개념은..조건문, 반복문, 함수, 입력 등등..선행학습도 행했습니다.

평소에 게임을 좋아하다보니까 이런 저런 계산들 다 넣으니, 하나의 게임이 만들어진 느낌이네요.

하나하나 까보겠습니다.

Scanner scanner = newScanner(System.in);

int start = 0;
int end = 0;
int breakAt = 0;

while(true) {
    System.out.print("숫자 몇 부터 시작할까요? : ");
    start = scanner.nextInt();

    if(start < 0) {
        System.out.println("음수는 취급 안 합니다.다시 정해주시죠.");
        continue;
    }

    break;
}

while(true) {
    System.out.print("몇 까지 반복 할까요? (현재 정한 시작 값 : "+ start + ") : ");
    end = scanner.nextInt();

    if(end <= start) {
        System.out.println("끝 값은 시작 값 보다 작거나 같을 수 없습니다.다시 시도해주세요.");
        continue;
    }

    break;
}

while(true) {
    System.out.println("중간에 값을 끊으실 건가요? (현재 정한 시작 값 : "+ start + ",끝 값 : "+ end + ") : ");
    System.out.println("동의 명령어 : Y,예,네,ㅇㅇ");
    System.out.println("거부 명령어 : N,아니요,아니오,ㄴㄴ");
    System.out.print("입력 : ");
    String check = scanner.next();

    if(check.equals("Y") || check.equals("y") || check.equals("예") || check.equals("네") || check.equals("ㅇㅇ")) {
        breakAt = getBreakPoint(scanner, start, end); // 중간값 지정 함수
        break;
    } else if(check.equals("N") || check.equals("n") || check.equals("아니요") || check.equals("아니오") || check.equals("ㄴㄴ")) {
        breakAt = end;
        break;
    } else{
        System.out.println("명령어에 없는 문자입니다.다시 시도해주세요.");
        continue;
    }
}

우선 Main 함수에 값을 입력 받아야겠죠

각각 시작 값, 끝 값 그리고 중간에 끊을 값을 정합니다.

수많은 if들은 방어코딩이라고 그…이상한 입력 안 받도록..네

중간에 끊을 값은 지정할지 지정 안 할지를 정합니다. 지정을 안 하면 end값으로 값이 할당됩니다.

public static int getBreakPoint(Scanner scan, int start, int end) {
        int breakAt = 0;
        while(true) {
            System.out.print("값을 입력 해 주세요. (현재 정한 시작 값 : "+ start + ",끝 값 : "+ end + ") : ");
            breakAt = scan.nextInt();

            if(breakAt <= start + 10) {
                System.out.println("못 해도 시작값 + 10보다 커야 합니다!");
                continue;
            } else if(breakAt == end) {
                return end; //지정 안 된거 확인 됐으니 그냥 return
            } else if(breakAt > end) {
                System.out.println("중간 값이 끝 값보다 클 수 없습니다!");
                continue;
            }

            break;
        }

        return breakAt;
    }

중간에 끊을 값을 입력받는 함수입니다.

while(true) {
            String[] mathList = {"배수", "10의자리가N", "1의자리가N", "379놀이"};

            System.out.println("어떤 계산을 할 건가요?번호를 입력 해주세요.");
            for(int i = 0; i < mathList.length; i++) {
                System.out.println(i + 1+ ". "+ mathList[i]);
            }

            System.out.print("번호 입력 : ");
            intchooseNumber = scanner.nextInt();

            if(chooseNumber > mathList.length) {
                System.out.println("리스트에 없는 요청입니다.");
                continue;
            }

            calculate(scanner, chooseNumber - 1, mathList, start, end, breakAt);
            break;
        }

값을 다 지정했으니 이제 4가지의 연산들 중 하나를 선택합니다. 왜 379인지는 나도 몰라요.

public static void calculate(Scanner scan, int choseNum, String[] mathLists, int start, int end, int breakAt) {
        if(mathLists[choseNum].equals(mathLists[0])) {
            multiples(scan, start, end, breakAt);
        } else if(mathLists[choseNum].equals(mathLists[1])) {
            getTensDigit(scan, start, end, breakAt);
        } else if(mathLists[choseNum].equals(mathLists[2])) {
            getOnesDigit(scan, start, end, breakAt);
        } else{
            threeSevenNine(scan, start, end, breakAt);
        }
    }

게임이 정해지면 calculate함수로 와서 필터링을 합니다. 여기가 좀 부족했나 싶었어요 제일 고민 많이 했던 곳이기도 하고

public static void multiples(Scanner scan, int start, int end, int breakAt) {
        int multiple = 0;
        while(true) {
            System.out.print("몇의 배수를 적으실 건가요? (현재 정한 시작 값 : "+ start + ",끝 값 : "+ end + ",중앙 값 : "+ breakAt + ") : ");
            multiple = scan.nextInt();

            if(multiple == 0|| multiple < start || multiple > breakAt) {
                System.out.println("그 값은 사용할 수 없습니다.");
                continue;
            }

            break;
        }

        for(int i = start; i <= end; i++) {
            if(i % multiple == 0) {
                System.out.println(multiple + "의 배수 발견! : "+ i);
            }

            if(breakAt != end && i == breakAt) {
                System.out.println("중간 값 "+ breakAt + "에 도달 했습니다.프로그램을 종료합니다.");
                return;
            }
        }
    }

    public static void getTensDigit(Scanner scan, int start, int end, int breakAt) {
        int n = 0;
        while(true) {
            System.out.print("숫자를 입력해주세요.(0초과 10미만) : ");
            n = scan.nextInt();

            if(n <= 0|| n >= 10) {
                System.out.println("그 값은 사용할 수 없습니다.");
                continue;
            }

            break;
        }

        for(inti = start; i <= end; i++) {
            intten = 0;
            if(i >= 100) {
                ten = (i % 100) / 10;
            } else{
                ten = i / 10;
            }

            if(ten == n) {
                System.out.println("10의 자리가 n인 수 발견! : "+ i);
            }

            if(breakAt != end && i == breakAt) {
                System.out.println("중간 값 "+ breakAt + "에 도달 했습니다.프로그램을 종료합니다.");
                return;
            }
        }
    }

    public static void getOnesDigit(Scanner scan, int start, int end, int breakAt) {
        int n = 0;
        while(true) {
            System.out.print("숫자를 입력해주세요.(0초과 10미만) : ");
            n = scan.nextInt();

            if(n <= 0|| n >= 10) {
                System.out.println("그 값은 사용할 수 없습니다.");
                continue;
            }

            break;
        }

        for(int i = start; i <= end; i++) {
            if(i % 10== n) {
                System.out.println("1의 자리가 n인 수 발견! : "+ i);
            }

            if(breakAt != end && i == breakAt) {
                System.out.println("중간 값 "+ breakAt + "에 도달 했습니다.프로그램을 종료합니다.");
                return;
            }
        }
    }

    public static void threeSevenNine(Scanner scan, int start, int end, int breakAt) {
        System.out.println("379게임 시작!");

        for(int i = start; i <= end; i++) {
            int jjak = i % 10;
            if(jjak == 3|| jjak == 7|| jjak == 9){
                System.out.println("짝!("+ i + ")");
            }else{
                System.out.println(i);
            }
        }
    }

이제 선택한 연산에 따라 함수가 실행될겁니다.

전반적인 흐름은 이렇습니다.

이제 전체코드 봅시닼ㅋㅋㅋㅋㅋㅋ

package ch06;

import java.util.Scanner;

public classEx2 {

    public static int getBreakPoint(Scanner scan, int start, int end) {
        int breakAt = 0;
        while(true) {
            System.out.print("값을 입력 해 주세요. (현재 정한 시작 값 : "+ start + ",끝 값 : "+ end + ") : ");
            breakAt = scan.nextInt();

            if(breakAt <= start + 10) {
                System.out.println("못 해도 시작값 + 10보다 커야 합니다!");
                continue;
            } else if(breakAt == end) {
                returnend;
            } else if(breakAt > end) {
                System.out.println("중간 값이 끝 값보다 클 수 없습니다!");
                continue;
            }

            break;
        }

        return breakAt;
    }

    public static void calculate(Scanner scan, int choseNum, String[] mathLists, int start, int end, int breakAt) {
        if(mathLists[choseNum].equals(mathLists[0])) {
            multiples(scan, start, end, breakAt);
        } else if(mathLists[choseNum].equals(mathLists[1])) {
            getTensDigit(scan, start, end, breakAt);
        } else if(mathLists[choseNum].equals(mathLists[2])) {
            getOnesDigit(scan, start, end, breakAt);
        } else{
            threeSevenNine(scan, start, end, breakAt);
        }
    }

    public static void multiples(Scanner scan, int start, int end, int breakAt) {
        int multiple = 0;
        while(true) {
            System.out.print("몇의 배수를 적으실 건가요? (현재 정한 시작 값 : "+ start + ",끝 값 : "+ end + ",중앙 값 : "+ breakAt + ") : ");
            multiple = scan.nextInt();

            if(multiple == 0|| multiple < start || multiple > breakAt) {
                System.out.println("그 값은 사용할 수 없습니다.");
                continue;
            }

            break;
        }

        for(int i = start; i <= end; i++) {
            if(i % multiple == 0) {
                System.out.println(multiple + "의 배수 발견! : "+ i);
            }

            if(breakAt != end && i == breakAt) {
                System.out.println("중간 값 "+ breakAt + "에 도달 했습니다.프로그램을 종료합니다.");
                return;
            }
        }
    }

    public static void getTensDigit(Scanner scan, int start, int end, int breakAt) {
        int n = 0;
        while(true) {
            System.out.print("숫자를 입력해주세요.(0초과 10미만) : ");
            n = scan.nextInt();

            if(n <= 0|| n >= 10) {
                System.out.println("그 값은 사용할 수 없습니다.");
                continue;
            }

            break;
        }

        for(inti = start; i <= end; i++) {
            intten = 0;
            if(i >= 100) {
                ten = (i % 100) / 10;
            } else{
                ten = i / 10;
            }

            if(ten == n) {
                System.out.println("10의 자리가 n인 수 발견! : "+ i);
            }

            if(breakAt != end && i == breakAt) {
                System.out.println("중간 값 "+ breakAt + "에 도달 했습니다.프로그램을 종료합니다.");
                return;
            }
        }
    }

    public static void getOnesDigit(Scanner scan, int start, int end, int breakAt) {
        int n = 0;
        while(true) {
            System.out.print("숫자를 입력해주세요.(0초과 10미만) : ");
            n = scan.nextInt();

            if(n <= 0|| n >= 10) {
                System.out.println("그 값은 사용할 수 없습니다.");
                continue;
            }

            break;
        }

        for(int i = start; i <= end; i++) {
            if(i % 10== n) {
                System.out.println("1의 자리가 n인 수 발견! : "+ i);
            }

            if(breakAt != end && i == breakAt) {
                System.out.println("중간 값 "+ breakAt + "에 도달 했습니다.프로그램을 종료합니다.");
                return;
            }
        }
    }

    public static void threeSevenNine(Scanner scan, int start, int end, int breakAt) {
        System.out.println("379게임 시작!");

        for(int i = start; i <= end; i++) {
            int jjak = i % 10;
            if(jjak == 3|| jjak == 7|| jjak == 9){
                System.out.println("짝!("+ i + ")");
            }else{
                System.out.println(i);
            }
        }
    }

    public static void main(String[] args) {

        Scanner scanner = newScanner(System.in);

        intstart = 0;
        intend = 0;
        intbreakAt = 0;

        while(true) {
            System.out.print("숫자 몇 부터 시작할까요? : ");
            start = scanner.nextInt();

            if(start < 0) {
                System.out.println("음수는 취급 안 합니다.다시 정해주시죠.");
                continue;
            }

            break;
        }

        while(true) {
            System.out.print("몇 까지 반복 할까요? (현재 정한 시작 값 : "+ start + ") : ");
            end = scanner.nextInt();

            if(end <= start) {
                System.out.println("끝 값은 시작 값 보다 작거나 같을 수 없습니다.다시 시도해주세요.");
                continue;
            }

            break;
        }

        while(true) {
            System.out.println("중간에 값을 끊으실 건가요? (현재 정한 시작 값 : "+ start + ",끝 값 : "+ end + ") : ");
            System.out.println("동의 명령어 : Y,예,네,ㅇㅇ");
            System.out.println("거부 명령어 : N,아니요,아니오,ㄴㄴ");
            System.out.print("입력 : ");
            String check = scanner.next();

            if(check.equals("Y") || check.equals("y") || check.equals("예") || check.equals("네") || check.equals("ㅇㅇ")) {
                breakAt = getBreakPoint(scanner, start, end);
                break;
            } else if(check.equals("N") || check.equals("n") || check.equals("아니요") || check.equals("아니오") || check.equals("ㄴㄴ")) {
                breakAt = end;
                break;
            } else{
                System.out.println("명령어에 없는 문자입니다.다시 시도해주세요.");
                continue;
            }
        }

        while(true) {
            String[] mathList = {"배수", "10의자리가N", "1의자리가N", "379놀이"};

            System.out.println("어떤 계산을 할 건가요?번호를 입력 해주세요.");
            for(int i = 0; i < mathList.length; i++) {
                System.out.println(i + 1+ ". "+ mathList[i]);
            }

            System.out.print("번호 입력 : ");
            intchooseNumber = scanner.nextInt();

            if(chooseNumber > mathList.length) {
                System.out.println("리스트에 없는 요청입니다.");
                continue;
            }

            calculate(scanner, chooseNumber - 1, mathList, start, end, breakAt);
            break;
        }

    }
}

100% 수작업 (NO AI)고, 1시간 30분정도 걸린 것 같네요. 솔직히 이거 별로 안어렵습니다 코드가 길 뿐이지..

갈 길이 멀군요.

profile
신생아 개발자

0개의 댓글