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
12 changes: 12 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,3 +5,15 @@

## 과제 제출 과정
* [과제 제출 방법](https://github.com/next-step/nextstep-docs/tree/master/ent-precourse)

## 구현할 기능 목록
* 유저에게 메세지를 출력하는 기능
* 유저에게 인풋을 요구하는 메세지
* 결과 메세지
* 유저의 인풋을 저장하는 기능
* 유저의 인풋에 대한 결과를 확인하는 기능
* 서로 다른 3개의 digit으로 이루어진 랜덤한 세자리 숫자 선정하는 기능

## 구현하면 좋을 기능
* input의 validity check 기능
* 더 많은 Test들
30 changes: 30 additions & 0 deletions src/main/java/baseball/Console.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package baseball;
import java.util.Scanner;

public class Console {
public String getInput() {
System.out.print("숫자를 입력해주세요 : ");
Scanner scanner = new Scanner(System.in);
return scanner.next();
}

public void printResult(int strike, int ball) {
if (strike + ball == 0) {
System.out.print("낫씽");
}
if (strike != 0) {
System.out.print(strike + " 스트라이크 ");
}
if (ball != 0) {
System.out.print(ball + " 볼");
Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

띄어쓰기가 빠져야함.

}
System.out.println();
}

public int endGame() {
System.out.println("3개의 숫자를 모두 맞히셨습니다! 게임 종료");
System.out.println("게임을 새로 시작하시려면 1, 종료하려면 2를 입력하세요.");
Scanner scanner = new Scanner(System.in);
return scanner.nextInt();
}
}
8 changes: 8 additions & 0 deletions src/main/java/baseball/Controller.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package baseball;

public class Controller {
public static void main(String[] args) {
Engine engine = new Engine();
engine.playBall();
}
}
31 changes: 31 additions & 0 deletions src/main/java/baseball/Engine.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package baseball;

public class Engine {
public void playBall() {
int flag = 1;
while (flag == 1) {
flag = match();
}
}

private int match() {
Console console = new Console();
Pitcher pitcher = new Pitcher();
String target = pitcher.generateNumber();
batting(console, target);
return console.endGame();
}

private void batting(Console console, String target) {
int strike = 0;
int ball;
Referee referee = new Referee();
while (strike != 3) {
String input = console.getInput();
int[] result = referee.judge(target, input);
strike = result[0];
ball = result[1];
console.printResult(strike, ball);
}
}
}
18 changes: 18 additions & 0 deletions src/main/java/baseball/Pitcher.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package baseball;
import java.util.Random;
import java.util.ArrayList;
import java.util.Arrays;

public class Pitcher {
public String generateNumber() {
Random random = new Random();
ArrayList<Integer> digits = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9));
StringBuilder number = new StringBuilder();
for (int i = 0; i < 3; i++) {
int randomIndex = random.nextInt(digits.size());
number.append(digits.get(randomIndex));
digits.remove(randomIndex);
}
return number.toString();
}
}
45 changes: 45 additions & 0 deletions src/main/java/baseball/Referee.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package baseball;
import java.util.ArrayList;
import java.util.List;

public class Referee {
public int[] judge(String target, String input) {
return new int[] {countStrike(convert(target), convert(input)), countBall(convert(target), convert(input))};
}

private List<Integer> convert(String string) {
List<Integer> career = new ArrayList<>();
for(String number: string.split("")) {
career.add(Integer.parseInt(number));
}
return career;
}

private int countBall(List<Integer> target, List<Integer> input) {
int ball = 0;
if (target.get(0) == input.get(1) || target.get(0) == input.get(2)) {
ball++;
}
if (target.get(1) == input.get(0) || target.get(1) == input.get(2)) {
ball++;
}
if (target.get(2) == input.get(0) || target.get(2) == input.get(1)) {
ball++;
}
return ball;
}

private int countStrike(List<Integer> target, List<Integer> input) {
int strike = 0;
if (target.get(0) == input.get(0)) {
strike ++;
}
if (target.get(1) == input.get(1)) {
strike ++;
}
if (target.get(2) == input.get(2)) {
strike ++;
}
return strike;
}
}
22 changes: 22 additions & 0 deletions src/test/java/baseball/PitcherTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package baseball;

import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.BeforeEach;
import static org.assertj.core.api.AssertionsForClassTypes.assertThat;

public class PitcherTest {
Pitcher pitcher;

@BeforeEach
void setUp() {
pitcher = new Pitcher();
}

@Test
@DisplayName("랜덤 세자리 숫자 생성 확인")
void lengthTest() {
String number = pitcher.generateNumber();
assertThat(3).isEqualTo(number.length());
}
}
21 changes: 21 additions & 0 deletions src/test/java/baseball/RefereeTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package baseball;

import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.BeforeEach;
import static org.assertj.core.api.AssertionsForClassTypes.assertThat;

public class RefereeTest {
Referee referee;

@BeforeEach
void setUp() {
referee = new Referee();
}

@Test
@DisplayName("스트라이크 볼 판단 확인")
void judgeTest() {
assertThat(new int[] {2, 0}).isEqualTo(referee.judge("123", "125"));
}
}
13 changes: 0 additions & 13 deletions src/test/java/study/StringTest.java

This file was deleted.