diff --git a/src/main/java/Car.java b/src/main/java/Car.java new file mode 100644 index 00000000..50d4fa89 --- /dev/null +++ b/src/main/java/Car.java @@ -0,0 +1,28 @@ +public class Car { + + private final String carName; + private int position = 0; + private final RandomMove randomMove; + + public Car(String name, RandomMove randomMove, int position) { + + this.carName = name; + this.randomMove = randomMove; + this.position = position; + } + + public void move(Movable movable) { + if (randomMove.canMove()) { + position++; + } + } + + public String getCarName() { + return carName; + } + + public int getPosition() { + return position; + } + +} diff --git a/src/main/java/Movable.java b/src/main/java/Movable.java new file mode 100644 index 00000000..4271e6ee --- /dev/null +++ b/src/main/java/Movable.java @@ -0,0 +1,6 @@ +//움직일 수 있나? 만 보는 인터페이스 +@FunctionalInterface +public interface Movable { + boolean canMove(); +} + diff --git a/src/main/java/RandomMove.java b/src/main/java/RandomMove.java new file mode 100644 index 00000000..a94c7cc3 --- /dev/null +++ b/src/main/java/RandomMove.java @@ -0,0 +1,18 @@ +import java.util.concurrent.ThreadLocalRandom; + +public class RandomMove implements Movable { + + private final int moveThreshold; + private final int randomBound; + + //생성자에서 전진 조건을 설정 + public RandomMove(int moveThreshold, int randomBound) { + this.moveThreshold = moveThreshold; + this.randomBound = randomBound; + } + + @Override + public boolean canMove() { + return (ThreadLocalRandom.current().nextInt(randomBound)) >= moveThreshold; + } +} diff --git a/src/main/java/Winners.java b/src/main/java/Winners.java new file mode 100644 index 00000000..078338f1 --- /dev/null +++ b/src/main/java/Winners.java @@ -0,0 +1,12 @@ +import java.util.List; +import java.util.stream.Collectors; + +public class Winners { + + public static List findWinnersNames(List cars) { + return cars.stream() + .filter(car -> car.getPosition() >= 5) + .map(Car::getCarName) + .collect(Collectors.toList()); + } +} diff --git a/src/test/java/WinnersTest.java b/src/test/java/WinnersTest.java new file mode 100644 index 00000000..674a0069 --- /dev/null +++ b/src/test/java/WinnersTest.java @@ -0,0 +1,20 @@ +import static org.assertj.core.api.Assertions.assertThat; + +import java.util.List; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +public class WinnersTest { + + @Test + @DisplayName("우승자(들) 이름을 반환한다") + void returnWinnerNames() { + Car normalCar = new Car("Car A",new RandomMove(4,10),5); + Car electricCar = new Car("Car B",new RandomMove(5,10),4); + Car truck = new Car("Car C",new RandomMove(6,10),2); + Car mini = new Car("Car D",new RandomMove(3,10),5); + + List cars = List.of(normalCar, electricCar, truck, mini); + assertThat(Winners.findWinnersNames(cars)).containsExactlyInAnyOrder("Car A", "Car D"); + } +}