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
36 changes: 36 additions & 0 deletions src/main/java/racingcar/Application.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,41 @@

public class Application {
public static void main(String[] args) {
Game game = new Game();
game.run();
}
}

class Car {
private int position;
private String name;
Car(String name, int position) {
this.position = 0;
if (Validate(name)) {
this.name = name;
}
}

private boolean Validate(String name) {
//밸리데이트 하는 코드
if(name == null || name.length() == 0 || name.length() > 5){
throw new IllegalArgumentException();
}
return true;
}

public String getName(){
return name;
}
public int getPosition(){
return position;
}
void tryMove(int act){
if(act>=4){
position += 1;
}
}
public String getState(){
return name+": "+"-".repeat(position);
}
}
33 changes: 33 additions & 0 deletions src/main/java/racingcar/Cars.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package racingcar;

import java.util.List;
import java.util.Random;
import java.util.stream.Collectors;

public class Cars {
private static final Random random = new Random();
private final List<Car> cars;

Cars(List<String>names){
this.cars=names.stream().map(Car::new).toList();
}

public void moveAll(){
cars.forEach(car->car.tryMove());

}

public String findWinners(){
int max = getMaxPosition();
String winners = cars.stream()
.filter(car -> car.getPosition()==max)
.map(Car::getName)
.collect(Collectors.joining(","));
return winners;
}
private int getMaxPosition(){
return cars.stream().mapToInt(Car::getPosition).max().orElse(0);
}

public List<Car>getCars(){return cars;}
}
4 changes: 4 additions & 0 deletions src/main/java/racingcar/Game.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
package racingcar;

public class Game {
}
35 changes: 35 additions & 0 deletions src/main/java/racingcar/InputView.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package racingcar;

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

public class InputView {
private static final Scanner scanner = new Scanner(System.in);


public static List<String> readCarNames(){
String input = scanner.nextLine();
return Arrays.asList(input.split(",",-1));
}

public static int readAttemptCount(){
String input = scanner.nextLine();
try{
int attempt = Integer.parseInt(input);
validatePostiveAttempt(attempt);
return attempt;
}
catch(Exception e){
throw new IllegalArgumentException(
);
}

}

private static void validatePostiveAttempt(int attempt){
if(attempt<=0){
throw new IllegalArgumentException();
}
}
}
25 changes: 25 additions & 0 deletions src/main/java/racingcar/Output.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package racingcar;

public class Output {
public static void printRoundResult(){

}


}

class Game {
public void run() {
Cars cars = new Cars(InputView.readCarNames());
int round = InputView.readAttemptCount();
for(int i=0;i<round;i++){
cars.moveAll();
render(cars);
}
System.out.println("최종 우승자 : "+cars.findWinners());
}

private void render(Cars cars) {
cars.getCars().forEach(car -> System.out.println(car.getState()));
}
}