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
25 changes: 25 additions & 0 deletions src/main/java/racingcar/Application.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,32 @@
package racingcar;

import camp.nextstep.edu.missionutils.Console;
import camp.nextstep.edu.missionutils.Randoms;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;

public class Application {
public static void main(String[] args) {
// TODO: 프로그램 구현
System.out.println(
"경주할 자동차 이름을 입력하세요." +
"(이름은 쉼표(,) 기준으로 구분)");
RacingGame racingGame;
int n;
racingGame = new RacingGame(Console.readLine());
System.out.println("시도할 회수는 몇회인가요?");
n = getTurn(Console.readLine());
racingGame.runRace(n);
racingGame.printResult();
return;
}
public static int getTurn(String input) {
int n;
n = Integer.parseInt(input);
if(n<1) {
throw new RuntimeException
("1보다 작은 횟수");
}
return n;
}
}
33 changes: 33 additions & 0 deletions src/main/java/racingcar/Car.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package racingcar;

import camp.nextstep.edu.missionutils.Randoms;

public class Car {
String name;
int distance;

public Car(String name) throws CarNameInputException{
name=name.trim();
if(name.length()>5||name.length()<1) {
System.out.println("자동차 이름은 1글자 이상, 5글자 이하여야 합니다.");
throw new CarNameInputException("잘못된 값이 입력되어서 종료합니다.");
}
/*if(name.indexOf(":")==-1){
throw new CarNameInputException("':'는 포함하면 안됩니다.");
}*/
this.name=name;
this.distance=0;
}
public void run() {
if(Randoms.pickNumberInRange(0,9)>=4){
this.distance++;
}
}
public void print() {
System.out.print(this.name+" : ");
for(int i=0;i<distance;i++) {
System.out.print("-");
}
System.out.println();
}
}
7 changes: 7 additions & 0 deletions src/main/java/racingcar/CarNameInputException.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package racingcar;

public class CarNameInputException extends RuntimeException {
public CarNameInputException(String msg) {
super(msg);
}
}
58 changes: 58 additions & 0 deletions src/main/java/racingcar/RacingGame.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
package racingcar;

import static org.assertj.core.api.Assertions.*;

public class RacingGame {
Car[] car;

public RacingGame(String input) {
String carName[] = input.split(",");
this.car=new Car[carName.length];

for(int i=0;i< carName.length;i++){
this.car[i]=new Car(carName[i]);
//assertThat(car[i].name.length()).isBetween(1,5);
// 차 이름 글자수 확인
this.checkSameCarName(i);//차 이름 중복 확인
}
}
public void checkSameCarName(int i){
for(int j=0;j<i;j++){
if(this.car[j].name.equals(this.car[i].name)){
throw new CarNameInputException("차 이름이 중복됩니다.");
}
}
}
public void runRace(int n) {
for(int i=0;i<n;i++){
this.runCars();
}
}
public void runCars(){
for(int i=0;i<this.car.length;i++) {
car[i].run();
car[i].print();
}
System.out.println();
}
public void printResult() {
System.out.print("최종 우승자 : ");
System.out.println(this.findWinner());
System.out.println("경기가 종료되었습니다.");
}
public String findWinner() {
int winnerDistance=0;
for(int i=0;i<car.length;i++) {
if(winnerDistance<car[i].distance) {
winnerDistance=car[i].distance;
}
}
StringBuilder winnerList=new StringBuilder();
for(int i=0;i<car.length;i++) {
if (winnerDistance == car[i].distance) {
winnerList.append(car[i].name).append(", ");
}
}
return winnerList.toString();
}
}
11 changes: 5 additions & 6 deletions src/test/java/racingcar/ApplicationTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,11 @@
import camp.nextstep.edu.missionutils.test.NsTest;
import org.junit.jupiter.api.Test;

import java.io.IOException;

import static camp.nextstep.edu.missionutils.test.Assertions.assertRandomNumberInRangeTest;
import static camp.nextstep.edu.missionutils.test.Assertions.assertSimpleTest;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
import static org.assertj.core.api.Assertions.*;

class ApplicationTest extends NsTest {
private static final int MOVING_FORWARD = 4;
Expand All @@ -25,10 +26,8 @@ class ApplicationTest extends NsTest {

@Test
void 이름에_대한_예외_처리() {
assertSimpleTest(() ->
assertThatThrownBy(() -> runException("pobi,javaji", "1"))
.isInstanceOf(IllegalArgumentException.class)
);
assertThatThrownBy(() -> runException("pobi,javaji", "1"))
.isInstanceOf(CarNameInputException.class);
}

@Override
Expand Down