기본적으로 1부터 9까지 서로 다른 수로 이루어진 3자리의 수를 맞추는 게임이다.
입력
출력
1볼 1스트라이크
낫싱
3스트라이크
3개의 숫자를 모두 맞히셨습니다! 게임 종료
숫자 야구 게임을 시작합니다.
숫자 야구 게임을 시작합니다.
숫자를 입력해주세요 : 123
1볼 1스트라이크
숫자를 입력해주세요 : 145
1볼
숫자를 입력해주세요 : 671
2볼
숫자를 입력해주세요 : 216
1스트라이크
숫자를 입력해주세요 : 713
3스트라이크
3개의 숫자를 모두 맞히셨습니다! 게임 종료
게임을 새로 시작하려면 1, 종료하려면 2를 입력하세요.
1
숫자를 입력해주세요 : 123
1볼
...
사용 예시
List<Integer> computer = new ArrayList<>(); // 난수를 담을 List<Integer>computer생성 while (computer.size() < 3) { // computer list사이즈가 3보다 작은 동안 반복 // 정해준 Randoms 라이브러리사용하여 1-9 난수 구하해서 randomNumber 에 담기 int randomNumber = Randoms.pickNumberInRange(1, 9); // computer List 에 지금 randomNumber 의 숫자를 포함하지 않는다면 리스트에 담기 if (!computer.contains(randomNumber)) { computer.add(randomNumber); // 리스트에 담기 } }
ChatGpt에서 확인 결과 두 방법 사이의 성능 차이는 미미하므로 가독성, 유지보수성에 따라 선택하면 된다고 합니다.
코드를 읽는 입장에서는 각 자리를 하나씩 중복체크해 추가해 나가는 것이 더 직관적이라고 생각되어 1번 방식을 선택하여 구현하도록하겠습니다.
컴퓨터가 선택한 3개의 숫자를 모두 맞히면 종료됩니다.
프로그램 종료 시 System.exit()를 호출하지 않는다.
사용자가 잘못된 값을 입력할 경우 IllegalArgumentException을 발생시킨 후 애플리케이션은 종료되어야 한다.
main 메서드는 이 예외를 처리하지 않습니다. 대신, 예외는 main 메서드가 포함된 프로그램 전체에서 전파됩니다. Java 프로그램은 기본적으로 예외를 처리하는 메커니즘이 내장되어 있어, 해당 예외가 처리되지 않으면 프로그램이 중단됩니다.
예외를 처리하고 종료하려면 System.exit(o)를 사용하고싶은데, 요구사항에 System.exit(o)은 사용하지 말라고 되어있어서, 처리하지 않고 알아서 종료하도록 뒀다.