Skip to content
Open
28 changes: 28 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,34 @@

<br>

## 👀 기능 목록
<숫자 생성>
1. 숫자 랜덤 생성(1~9 범위의 3자리 자연수)
2. 각 자리 숫자는 중복 허용 XX

<입력>
1.[예외] 숫자가 아닌 값을 입력받은 경우
2.[예외] 3자리 자연수 아닌 경우
3.[예외] 각 자릿수의 숫자중 중복된 값이 있는 경우
4. [예외] 0 이하 음수인 경우
5. [예외] IllegalArgumentException 발생 시킨 후 종료

<힌트>
1. 같은 자릿수에 숫자 일치 : 스트라이크
2. 다른 자릿수에 숫자 일치 : 볼
3. 다른 자릿수에 다른 수 : 낫싱

<출력>
1. 볼, 스트라이크 카운트 후 출력
2. 출력 순서: n볼 m스트라이크
3. m=3일 때(3 스트라이크) 게임 종료 문구 출력

<종료조건>
1. 재시작 - 숫자 랜덤 생성 메서드 호출부분으로 돌아감
2. 입력 종료 - 게임 종료!

<br>

## ✍🏻 입출력 요구사항

### ⌨️ 입력
Expand Down
30 changes: 27 additions & 3 deletions src/main/java/baseball/Application.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,31 @@
package baseball;

import java.util.List;

import service.ComputerRandomNum;
import service.JudgeResult;
import util.InputUtil;

public class Application {
public static void main(String[] args) {
//TODO: 숫자 야구 게임 구현
}
public static void main(String[] args) {
//TODO: 숫자 야구 게임 구현
ComputerRandomNum clearNumber = new ComputerRandomNum();
InputUtil inputUtil = new InputUtil();
JudgeResult judge = new JudgeResult();

boolean again = true;

while (again){
List<Integer> computer = clearNumber.getComputerNumber();
String result = "";
while (!result.equals("3스트라이크")){
result = judge.judgement(computer, inputUtil.userNumber());
System.out.println(result);
}
System.out.println("3개의 숫자를 모두 맞히셨습니다! 게임 종료");
again = inputUtil.replay();
}
}


}
26 changes: 26 additions & 0 deletions src/main/java/service/CompareNum.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package service;

import java.util.List;

public class CompareNum {
public int countBall(List<Integer> computer, List<Integer> user){
int result = 0;
for(int i = 0; i < user.size(); i++){
if(computer.contains(user.get(i))){
result += 1;
}
}
return result;
}

public int countStrike(List<Integer> computer, List<Integer> user){
int strike = 0;
for(int i = 0; i < user.size(); i++){
if(computer.get(i) == user.get(i)){
strike += 1;
}
}
return strike;
}

}
35 changes: 35 additions & 0 deletions src/main/java/service/ComputerRandomNum.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package service;

import java.util.List;
import java.util.ArrayList;
import camp.nextstep.edu.missionutils.Randoms;

public class ComputerRandomNum {

private List<Integer> computerNumber;

public ComputerRandomNum() {
computerNumber = setGameNumber();
}

public List<Integer> getComputerNumber() {
return computerNumber;
}
public static int getComputerNum() {
return Randoms.pickNumberInRange(1, 9);
}

public List<Integer> setGameNumber() {
List<Integer> computerNumber = new ArrayList<>();
while (computerNumber.size() < 3) {
int randomNumber = getComputerNum();
if(computerNumber.contains(randomNumber)){
continue;
}else {
computerNumber.add(randomNumber);
}
}
return computerNumber;
}

}
27 changes: 27 additions & 0 deletions src/main/java/service/JudgeResult.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package service;

import java.util.List;

public class JudgeResult {

CompareNum compare = new CompareNum();

public String judgement(List<Integer> computer, List<Integer> player){
int total = compare.countBall(computer, player);
int strike = compare.countStrike(computer, player);
int ball = total - strike;

String result = null;

if(total == 0){
result = "낫싱";
}else if(ball != 0 && strike == 0){
result = ball + "볼";
}else if(strike != 0 && ball == 0){
result = strike + "스트라이크";
}else {
result = ball + "볼 " + strike + "스트라이크";
}
return result;
}
}
50 changes: 50 additions & 0 deletions src/main/java/util/InputException.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
package util;

import java.util.HashSet;
import java.util.Set;

public class InputException {
private String inputNumber;

public InputException(String inputNumber) {

isStringLengthCorrect(inputNumber);
isDigitPlayerNumber(inputNumber);
isDifferentPlayerNumber(inputNumber);

this.inputNumber = inputNumber;
}

public String getInputNumber() {
return inputNumber;
}

public static void isStringLengthCorrect(String word) throws IllegalArgumentException {
if (word.length() != 3) {
throw new IllegalArgumentException("잘못된 값을 입력하셨습니다. ");
}
}


public static void isDifferentPlayerNumber(String word) throws IllegalArgumentException {
Set<Character> set = new HashSet<>();

for (int i = 0; i < word.length(); i++) {
set.add(word.charAt(i));
}
if (set.size() != word.length()) {
throw new IllegalArgumentException("잘못된 값을 입력하셨습니다.");
}
}
public static void isDigitPlayerNumber(String word) {
for (int i = 0; i < word.length(); i++) {
isDigitCharInString(word, i);
}
}

public static void isDigitCharInString(String word, int index) throws IllegalArgumentException {
if (!Character.isDigit(word.charAt(index))) {
throw new IllegalArgumentException("잘못된 값을 입력하셨습니다.");
}
}
}
31 changes: 31 additions & 0 deletions src/main/java/util/InputUtil.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package util;

import java.util.List;
import java.util.ArrayList;
import camp.nextstep.edu.missionutils.Console;

public class InputUtil {

public List<Integer> userNumber() {
System.out.print("숫자를 입력해주세요 : ");
String input = Console.readLine();
// 예외 처리 메서드 만들기....

List<Integer> userNum = new ArrayList<>();
for(String number: input.split("")){
userNum.add(Integer.parseInt(number));
}
return userNum;
}

public boolean replay(){
System.out.println("게임을 새로 시작하려면 1, 종료하려면 2를 입력하세요.");
String input = Console.readLine();
char answer = input.charAt(0);
if(answer == '1'){
return true;
}
return false;
}

}