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

public class Car {
private Name name;
private Progress progress;

public Car(String name, int progress) {
this.name= new Name(name);
this.progress =new Progress(progress);
}

public void logProgress(){
System.out.print(this.name);
for(int i=0;i<this.progress.getProgress();i++)
System.out.print("-");
}

public void advance(MovingStrategy movingStrategy){
if(movingStrategy.movable())
progress.increaseProgress();
}

public String getName() {
return name.getName();
}

public int getProgress() {
return this.progress.getProgress();
}
}
21 changes: 21 additions & 0 deletions src/main/java/carracinggame/CarRacingGame.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package carracinggame;

import java.util.*;

public class CarRacingGame {
public static String[] getCarnameArray(String names){
return names.split(",");
}


public static List<String> judgeTheWinner(Cars cars){
List<String> winners= new ArrayList<>();
Map<Integer,List<String>> carMap= new HashMap<>();
int max=0;
for(Car car:cars.getCars()){
carMap.computeIfAbsent(car.getProgress(),k->new ArrayList<>()).add(car.getName());
max=Math.max(max,car.getProgress());
}
return carMap.get(max);
}
}
7 changes: 7 additions & 0 deletions src/main/java/carracinggame/CarValidation.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package carracinggame;

public class CarValidation {
public static boolean validateNameLength(String name){
return name.length()<6;
}
}
23 changes: 23 additions & 0 deletions src/main/java/carracinggame/Cars.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package carracinggame;

import java.util.List;

public class Cars {
private List<Car> cars;

public Cars(List<Car> cars) {
this.cars = cars;
}

public List<Car> getCars() {
return cars;
}

public void setCars(List<Car> cars) {
this.cars = cars;
}

public void addCar(Car car) {
this.cars.add(car);
}
}
5 changes: 5 additions & 0 deletions src/main/java/carracinggame/MovingStrategy.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package carracinggame;

public interface MovingStrategy {
boolean movable();
}
18 changes: 18 additions & 0 deletions src/main/java/carracinggame/Name.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package carracinggame;



public class Name {
String name;

public Name(String name) {
if(name.isBlank())
throw new IllegalArgumentException("빈값은 입력 불가 합니다.");

this.name = name;
}

public String getName() {
return name;
}
}
22 changes: 22 additions & 0 deletions src/main/java/carracinggame/Progress.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package carracinggame;

public class Progress {
private int progress;

public Progress() {
this(0);
}
public Progress(int progress) {
if(progress<0)
throw new IllegalArgumentException("음수는 입력불가 합니다.");
this.progress = progress;
}

public int getProgress() {
return this.progress;
}

public void increaseProgress() {
this.progress++;
}
}
18 changes: 18 additions & 0 deletions src/main/java/carracinggame/RandomMovingStrategy.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package carracinggame;

import carracinggame.MovingStrategy;

import java.util.Random;

public class RandomMovingStrategy implements MovingStrategy {
private static final int FORWARD_NUM=4;
private static final int MAX_BOUND=10;
@Override
public boolean movable() {
return getRandomNumber()>=FORWARD_NUM;
}
public static int getRandomNumber() {
Random random = new Random();
return random.nextInt(MAX_BOUND);
}
}
31 changes: 31 additions & 0 deletions src/main/java/practice/Car.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package practice;

import java.util.HashMap;

public class Car {
private String name;
private int progress;

public Car(String name, int progress) {
this.name = name;
this.progress = progress;
}

public void logProgress(Car car){
System.out.print(this.name);
for(int i=0;i<this.progress;i++)
System.out.print("-");
}

public void advance(){
this.progress++;
}

public String getName() {
return name;
}

public int getProgress() {
return progress;
}
}
30 changes: 30 additions & 0 deletions src/main/java/practice/CarRacingGame.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package practice;

import java.text.DecimalFormat;
import java.util.*;

public class CarRacingGame {
public static String[] getCarnameArray(String names){
return names.split(",");
}

public static int getRandomNumber() {
Random random = new Random();
return random.nextInt(9);
}

public static boolean ableToAdvance(int random){
return random>3;
}

public static List<String> judgeTheWinner(Cars cars){
List<String> winners= new ArrayList<>();
Map<Integer,List<String>> carMap= new HashMap<>();
int max=0;
for(Car car:cars.getCars()){
carMap.computeIfAbsent(car.getProgress(),k->new ArrayList<>()).add(car.getName());
max=Math.max(max,car.getProgress());
}
return carMap.get(max);
}
}
7 changes: 7 additions & 0 deletions src/main/java/practice/CarValidation.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package practice;

public class CarValidation {
public static boolean validateNameLength(String name){
return name.length()<6;
}
}
23 changes: 23 additions & 0 deletions src/main/java/practice/Cars.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package practice;

import java.util.List;

public class Cars {
private List<Car> cars;

public Cars(List<Car> cars) {
this.cars = cars;
}

public List<Car> getCars() {
return cars;
}

public void setCars(List<Car> cars) {
this.cars = cars;
}

public void addCar(Car car) {
this.cars.add(car);
}
}
55 changes: 55 additions & 0 deletions src/test/java/carracinggame/CarRacingGameTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
package carracinggame;
import org.junit.jupiter.api.Test;
import carracinggame.Car;
import carracinggame.CarRacingGame;
import carracinggame.CarValidation;
import carracinggame.Cars;

import java.util.ArrayList;

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


public class CarRacingGameTest {
@Test
void 글자수_검증(){
assertThat(CarValidation.validateNameLength("test")).isTrue();
}

@Test
void 배열_검증(){
String[] carNames= CarRacingGame.getCarnameArray("pobi,crong,honux");
assertThat(carNames).containsExactly("pobi","crong","honux");
}

@Test
void _4이상만_전진_조건(){

int a= 4;
int b= 2;
MovingStrategy movingStrategy= new RandomMovingStrategy();
assertThat(movingStrategy.movable()).isTrue();
assertThat(movingStrategy.movable()).isFalse();
}

@Test
void _이동(){
Car car1= new Car("pobi",1);
car1.advance(()->true);
assertThat(car1.getProgress()).isEqualTo(2);
car1.advance(()->false);
assertThat(car1.getProgress()).isEqualTo(2);
}

@Test
void 승자검증(){
Car car1= new Car("pobi",1);
Car car2= new Car("crong",2);
Car car3= new Car("honux",3);
Cars cars= new Cars(new ArrayList<>());
cars.addCar(car1);
cars.addCar(car2);
cars.addCar(car3);
assertThat(CarRacingGame.judgeTheWinner(cars)).containsExactly("honux");
}
}
42 changes: 42 additions & 0 deletions src/test/java/practice/CarRacingGameTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
package practice;
import org.junit.jupiter.api.Test;

import java.util.ArrayList;

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


public class CarRacingGameTest {
@Test
void 글자수_검증(){
assertThat(CarValidation.validateNameLength("test")).isTrue();
}

@Test
void 배열_검증(){
String[] carNames=CarRacingGame.getCarnameArray("pobi,crong,honux");
assertThat(carNames).containsExactly("pobi","crong","honux");
}

@Test
void _4이상만_전진_조건(){

int a= 4;
int b= 2;
assertThat(CarRacingGame.ableToAdvance(a)).isTrue();
assertThat(CarRacingGame.ableToAdvance(b)).isFalse();
}

@Test
void 승자검증(){
Car car1= new Car("pobi",1);
Car car2= new Car("crong",2);
Car car3= new Car("honux",3);
Cars cars= new Cars(new ArrayList<>());
cars.addCar(car1);
cars.addCar(car2);
cars.addCar(car3);
assertThat(CarRacingGame.judgeTheWinner(cars)).containsExactly("honux");
}
}