Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 10 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1 +1,10 @@
# java-baseball-precourse
# java-baseball-precourse

# 프로젝트 기능 목록

1. 사용자 입력 받기
2. 입력 데이터 확인
3. 결과 계산
4. 계산된 결과 출력
5. 에러 핸들링
6. 게임 재시작 기능
8 changes: 8 additions & 0 deletions src/main/java/Application.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
public class Application {
public static void main(String[] args){

BaseballProcess game = new BaseballProcess();

game.startGame();
}
}
95 changes: 95 additions & 0 deletions src/main/java/BaseballProcess.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
import java.util.*;

public class BaseballProcess {

private List<Integer> randomNumber;
private Scanner sc = new Scanner(System.in);

// 테스트 용도
public void setRandomNumber(List<Integer> randomNumber) {
this.randomNumber = randomNumber;
}
public List<Integer> getRandomNumber() {
return randomNumber;
}

public BaseballProcess(){
restart();
}

public void startGame(){
while(true){
System.out.print("숫자를 입력해 주세요 : ");
String input = sc.nextLine();

List<Integer> guess = parseInput(input);

int[] result = checkGuess(guess);

if(result[0] == 3){
System.out.println("3스트라이크");
System.out.println("3개의 숫자를 모두 맞히셨습니다! 게임 종료");
System.out.println("게임을 새로 시작하려면 1, 종료하렬면 2를 입력하세요.");

String command = sc.nextLine();
if("2".equals(command)){
sc.close();
break;
}
else{
restart();
}
}
else{
printResult(result[0], result[1]);
}
}
}

public List<Integer> parseInput(String input){
List<Integer> number = new ArrayList<>();
for(char c: input.toCharArray()){
number.add(Character.getNumericValue(c));
}

return number;
}

public int[] checkGuess(List<Integer> guess){
int strike = 0;
int ball = 0;

for(int i=0; i<guess.size(); i++){
if(guess.get(i).equals(randomNumber.get(i))){
strike += 1;
}
else if(randomNumber.contains(guess.get(i))){
ball += 1;
}
}

return new int[]{strike, ball};
}

private void printResult(int strike, int ball){
if(strike==0 && ball==0){
System.out.println("낫싱");
}
else{
if(ball>0 && strike>0){
System.out.printf("%d볼 %d스트라이크\n", ball, strike);
}
else if(ball > 0){
System.out.printf("%d볼\n", ball);
}
else if(strike > 0){
System.out.printf("%d스트라이크\n", strike);
}
}
}

private void restart(){
randomNumber = RandomNumberGeneration.randomNumberProduce();
// System.out.printf("테스트: %s\n", randomNumber.toString());
}
}
18 changes: 18 additions & 0 deletions src/main/java/RandomNumberGeneration.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
import java.util.*;

public class RandomNumberGeneration {

public static List<Integer> randomNumberProduce(){
List<Integer> number = new ArrayList<>();

while(number.size() < 3){
int randomNum = (int)(Math.random()*9) + 1;

if(!number.contains(randomNum)){
number.add(randomNum);
}
}

return number;
}
}
30 changes: 30 additions & 0 deletions src/test/java/BaseballProcessTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import static org.assertj.core.api.Assertions.*;

import java.util.Arrays;
import java.util.List;

class BaseballProcessTest {

private BaseballProcess baseballProcess;

@BeforeEach
void setUp() {
baseballProcess = new BaseballProcess();
baseballProcess.setRandomNumber(Arrays.asList(1, 2, 3));
}

@Test
void testParseInput() {
List<Integer> expected = Arrays.asList(1, 2, 3);
assertThat(baseballProcess.parseInput("123")).isEqualTo(expected);
}

@Test
void testCheckGuess() {
assertThat(baseballProcess.checkGuess(Arrays.asList(1, 2, 3))).containsExactly(3, 0);
assertThat(baseballProcess.checkGuess(Arrays.asList(1, 2, 4))).containsExactly(2, 0);
assertThat(baseballProcess.checkGuess(Arrays.asList(4, 1, 2))).containsExactly(0, 2);
}
}