[과제] 가위바위보 게임, 성적 출력, 업다운 게임 리팩토링

킹발·2022년 9월 22일
0
post-thumbnail

가위바위보 게임

내 코드

  • switch문을 쓰려니 break 문을 많이 써야하고 확실히 코드줄이 늘어난다.
private static void RspGame1() {
    Scanner scanner = new Scanner(System.in);
    System.out.print("가위(0), 바위(1), 보(2): ");

    int human = scanner.nextInt();
    int com = (int) (Math.random() * 3);

    switch (human) {

        case 0:
            switch (com) {
                case 1:
                    System.out.println("컴퓨터 승리");
                    break;
                case 2:
                    System.out.println("인간 승리");
                    break;
                default:
                    System.out.println("비김");
                    break;
            }
            break;
        case 1:
            switch (com) {
                case 2:
                    System.out.println("컴퓨터 승리");
                    break;
                case 0:
                    System.out.println("인간 승리");
                    break;
                default:
                    System.out.println("비김");
                    break;
            }
            break;
        case 2:
            switch (com) {
                case 0:
                    System.out.println("컴퓨터 승리");
                    break;
                case 1:
                    System.out.println("인간 승리");
                    break;
                default:
                    System.out.println("비김");
                    break;
            }
            break;
    }
}

강사님 코드

  • 조건문을 사용해서 승무패를 판정
  • 먼저 제일 판단하기 쉬운 무승부를 판단
  • 그리고 내가 이겼을 경우를 판단
    • 0은 1한테 지고 1은 2한테, 2는 0한테 진다
      • 0 -> 1 1 -> 2 2 -> 0 으로 만들어 주는 로직을 생각
      • user == (computer + 1) % 3
  • 나머지는 다 내가 진 경우다
private static void RspGame2() {
    Scanner sc = new Scanner(System.in);
    System.out.print("가위(0), 바위(1), 보(2): ");
    int user = sc.nextInt();
    int computer = (int) (Math.random() * 3);

    if (user == computer)
        System.out.println("인간과 컴퓨터가 비겼음");
    else if (user == (computer + 1) % 3) // 0은 1한테 지고 1은 2한테, 2는 0한테 진다.
        System.out.println("인간: " + user + " 컴퓨터: " + computer + "   인간 승리");
    else
        System.out.println("인간: " + user + " 컴퓨터: " + computer + "   컴퓨터 승리");
}

성적 출력 프로그램

  • Grade 클래스를 만들고,
    국어 영어 수학을 입력받는 기능을 만들고
    평균이 90 수 우 미양가를 출력하는
    프로그램을 만드시오.
  • 위의 것을 테스트 하는 GradeTest
    클래스를 만드시오.
static class Grade{
    private int ko;
    private int en;
    private int ma;

    public void setKo(int ko) {
        this.ko = ko;
    }

    public void setEn(int en) {
        this.en = en;
    }

    public void setMa(int ma) {
        this.ma = ma;
    }

    void printGrade() {
        double avg = (double) (ko+en+ma) / 3;
        System.out.println(avg);
        if(avg>=90) System.out.println("수");
        else if (avg>=80) System.out.println("우");
        else if (avg>=70) System.out.println("미");
        else if (avg>=60) System.out.println("양");
        else System.out.println("가");
    }
}

static class GradeTest{
    static void test() {
        Grade grade = new Grade();
        grade.setKo(50);
        grade.setEn(60);
        grade.setMa(80);
        grade.printGrade();
    }
}
public static void main(String[] args) {
    GradeTest.test();
}

업다운게임 리팩토링

public class UpAndDownTest {


    static class UpDownGame{
        Scanner sc = new Scanner(System.in);

        final int COUNT = 10;
        int[] arrInput;// 사용자 입력
        int answer;
        int num;

        void run() {
            arrInput = new int[COUNT];
            answer = (int) (Math.random() * 100 + 1);

            for (int i = 0; i < arrInput.length; i++) {
                System.out.print("숫자를 입력해주세요 : ");
                num = sc.nextInt();

                if (num > answer) {
                    System.out.println("Down ===> " + (COUNT - i - 1) + "번 남아 있습니다.");
                } else if (num < answer) {
                    System.out.println("Up ====> " + (COUNT - i - 1) + "번 남아 있습니다.");
                } else {
                    System.out.println("일치");
                    break;
                }
            }
        }
    }

    public static void main(String[] args) {
        Scanner sc;
        UpDownGame game;

        while (true) {

            try {
                sc = new Scanner(System.in);

                System.out.println("게임시작 1");
                System.out.println("게임종료 2");
                System.out.println(">>");

                int num = sc.nextInt();

                if (num == 1) {
                    game = new UpDownGame();
                    game.run();
                } else {
                    System.out.println("게임을 종료합니다.");
                    break;
                }
            } catch (Exception e) {
                System.out.println("잘못된 입력입니다.");
                System.out.println("게임을 다시 시작 합니다.");
            }

        }

    }
}

0개의 댓글