-
Notifications
You must be signed in to change notification settings - Fork 1.2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Step4 - 자동차 경주(우승자) #5490
base: jinnie-j
Are you sure you want to change the base?
Step4 - 자동차 경주(우승자) #5490
Changes from all commits
406d3fb
5360d68
1271fd6
67b3edd
df0774f
1df72e9
8e26009
ae98fec
7395a22
cd5d349
afff815
8112cbd
a8e6651
7e3a824
c25dfc7
8b14355
37c9677
55a2a35
fe6e9f3
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,22 +1,29 @@ | ||
# 자동차 경주 게임 | ||
|
||
## 진행 방법 | ||
|
||
* 자동차 경주 게임 요구사항을 파악한다. | ||
* 요구사항에 대한 구현을 완료한 후 자신의 github 아이디에 해당하는 브랜치에 Pull Request(이하 PR)를 통해 코드 리뷰 요청을 한다. | ||
* 코드 리뷰 피드백에 대한 개선 작업을 하고 다시 PUSH한다. | ||
* 모든 피드백을 완료하면 다음 단계를 도전하고 앞의 과정을 반복한다. | ||
|
||
## 온라인 코드 리뷰 과정 | ||
|
||
* [텍스트와 이미지로 살펴보는 온라인 코드 리뷰 과정](https://github.com/next-step/nextstep-docs/tree/master/codereview) | ||
|
||
## 기능 요구사항 | ||
|
||
* 초간단 자동차 경주 게임을 구현한다. | ||
* 주어진 횟수 동안 n대의 자동차는 전진 또는 멈출 수 있다. | ||
* 사용자는 몇 대의 자동차로 몇 번의 이동을 할 것인지를 입력할 수 있어야 한다. | ||
* 전진하는 조건은 0에서 9 사이에서 random 값을 구한 후 random 값이 4이상일 경우이다. | ||
* 자동차의 상태를 화면에 출력한다. 어느 시점에 출력할 것인지에 대한 제약은 없다. | ||
|
||
## 기능 구현사항 | ||
- 자동차 대수와 시도 횟수를 입력받는다. | ||
- 0-9 사이가 아닌 숫자 또는 빈값을 입력하는 경우 오류가 발생한다. | ||
- 0-9 사이의 랜덤 값을 생성하여 4이상일 경우 전진한다. | ||
- 시도 횟수만큼 모든 자동차의 상태를 출력한다. | ||
|
||
- [x] 자동차 이름과 시도 횟수를 입력받는다. | ||
- [x] 자동차 이름 길이 5 제한 | ||
- [x] 0-9 사이가 아닌 숫자 또는 빈값을 입력하는 경우 오류가 발생한다. | ||
- [x] 0-9 사이의 랜덤 값을 생성하여 4이상일 경우 전진한다. | ||
- [x] 시도 횟수만큼 모든 자동차의 상태를 출력한다. | ||
- [x] 경주 종료 후 우승를 출력한다. | ||
This file was deleted.
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
package racingcar; | ||
|
||
import java.util.ArrayList; | ||
import java.util.Arrays; | ||
import java.util.List; | ||
|
||
public class Cars { | ||
|
||
private static final String COMMA = ","; | ||
private final List<Car> carList; | ||
|
||
public Cars(List<Car> carList) { | ||
this.carList = carList; | ||
} | ||
|
||
public static List<Car> makeCarList(String names) { | ||
List<Car> carList = new ArrayList<>(); | ||
for (String name : splitNames(names)) { | ||
checkCarName(name); | ||
carList.add(new Car(name, 0)); | ||
} | ||
return carList; | ||
} | ||
Comment on lines
+16
to
+23
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 이 메서드외에 Cars의 활용도가 없네요 😢 |
||
|
||
private static void checkCarName(String name) { | ||
if (isNullOrBlank(name)) { | ||
throw new IllegalArgumentException(); | ||
} | ||
} | ||
|
||
private static boolean isNullOrBlank(String name) { | ||
return name == null || name.isBlank(); | ||
} | ||
|
||
public static List<String> splitNames(String names) { | ||
return new ArrayList<>(Arrays.asList(names.split(COMMA))); | ||
} | ||
|
||
public int size() { | ||
return carList.size(); | ||
} | ||
|
||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,19 +1,21 @@ | ||
package racingcar; | ||
|
||
public class InputValue { | ||
private final int numberOfCars; | ||
private final String names; | ||
private final int tryCount; | ||
|
||
public InputValue(int numberOfCars, int tryCount){ | ||
this.numberOfCars = numberOfCars; | ||
public InputValue(String names, int tryCount) { | ||
this.names = names; | ||
this.tryCount = tryCount; | ||
} | ||
|
||
public int getNumberOfCars(){ | ||
return numberOfCars; | ||
public String getNameOfCars() { | ||
return names; | ||
} | ||
|
||
public int getTryCount(){ | ||
public int getTryCount() { | ||
return tryCount; | ||
} | ||
} | ||
|
||
|
||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,31 @@ | ||
package racingcar; | ||
|
||
import java.util.regex.Matcher; | ||
import java.util.regex.Pattern; | ||
|
||
public class NumberValidator { | ||
private static final Pattern NUMERIC_PATTERN = Pattern.compile("\\d"); | ||
public static final int MIN_DISTANCE = 0; | ||
|
||
public void nullCheck(String input) { | ||
if (input == null || input.isBlank()) { | ||
throw new RuntimeException("빈 값이 입력되었습니다."); | ||
} | ||
} | ||
|
||
public void numericCheck(String input) { | ||
Matcher matcher = NUMERIC_PATTERN.matcher(input); | ||
if (!matcher.find()) { | ||
throw new RuntimeException("숫자만 입력해주세요."); | ||
} | ||
numberCheck(input); | ||
} | ||
|
||
private void numberCheck(String input) { | ||
Integer number = Integer.parseInt(input); | ||
if (number < MIN_DISTANCE) { | ||
throw new RuntimeException("0-9 사이의 숫자를 입력해주세요."); | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 메시지를 보면 9 를 초과하는 숫자는 입력할 수 없을 것 같지만 |
||
} | ||
} | ||
|
||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,34 @@ | ||
package racingcar; | ||
|
||
import java.util.ArrayList; | ||
import java.util.List; | ||
|
||
public class Record { | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 클래스명은 기록인데, 우승자를 구하는 로직만 포함되어 있네요 |
||
public static List<String> getRecord(List<Car> carList) { | ||
return getWinnerList(carList, findMaxPosition(carList)); | ||
} | ||
|
||
public static int findMaxPosition(List<Car> carList) { | ||
int max = 0; | ||
for (Car car : carList) { | ||
max = car.getMax(max); | ||
} | ||
return max; | ||
} | ||
|
||
private static List<String> getWinnerList(List<Car> carList, int max) { | ||
List<String> winnerList = new ArrayList<>(); | ||
|
||
for (Car car : carList) { | ||
makeWinnerList(winnerList, max, car); | ||
} | ||
return winnerList; | ||
} | ||
|
||
private static List<String> makeWinnerList(List<String> winnerList, int max, Car car) { | ||
if (car.isMaxPosition(max)) { | ||
winnerList.add(car.getName()); | ||
} | ||
return winnerList; | ||
} | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -11,6 +11,8 @@ public static void printResult(List<Car> cars) { | |
} | ||
|
||
public static void printCarResult(Car car) { | ||
|
||
System.out.print(car.getName() + " : "); | ||
for (int i = 0; i < car.getPosition(); i++) { | ||
System.out.print("-"); | ||
} | ||
|
@@ -20,4 +22,8 @@ public static void printCarResult(Car car) { | |
public static void printResultMessage() { | ||
System.out.println("실행 결과"); | ||
} | ||
|
||
public static void printWinners(List<String> winnerList) { | ||
System.out.println(String.join(",", winnerList) + "가 최종 우승했습니다."); | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. join 👍 |
||
} | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
기능 목록 정리 👍