diff --git a/Java_Racingcar_2026-1 b/Java_Racingcar_2026-1 new file mode 160000 index 0000000..079e54f --- /dev/null +++ b/Java_Racingcar_2026-1 @@ -0,0 +1 @@ +Subproject commit 079e54f7dc719facaa7704fce7b14f2fbbc85a43 diff --git a/src/main/java/racingcar/Application.java b/src/main/java/racingcar/Application.java index a17a52e..39a5476 100644 --- a/src/main/java/racingcar/Application.java +++ b/src/main/java/racingcar/Application.java @@ -1,7 +1,19 @@ package racingcar; +import java.util.*; public class Application { public static void main(String[] args) { - // TODO: 프로그램 구현 + InputView input = new InputView(); + InputValidator iv = new InputValidator(); + + List cars = iv.CarNamesValidator(input.inputCarName()); + int n = iv.IntegerValidator(input.inputRepeatN()); + + + Gaming g = new Gaming(cars, n); + g.start(); + + Winner w = new Winner(cars); + System.out.println("최종 우승자 : " + String.join(", ", w.findWinner())); } } diff --git a/src/main/java/racingcar/Car.java b/src/main/java/racingcar/Car.java new file mode 100644 index 0000000..70ab0b5 --- /dev/null +++ b/src/main/java/racingcar/Car.java @@ -0,0 +1,23 @@ +package racingcar; + +public class Car { + private final String name; + private int moveCount; + + public Car(String name) { + this.name = name; + this.moveCount = 0; + } + + public void move() { + moveCount++; + } + + + public String getName() { + return name; + } + public int getMoveCount() { + return moveCount; + } +} \ No newline at end of file diff --git a/src/main/java/racingcar/Gaming.java b/src/main/java/racingcar/Gaming.java new file mode 100644 index 0000000..a6256c8 --- /dev/null +++ b/src/main/java/racingcar/Gaming.java @@ -0,0 +1,28 @@ +package racingcar; + +import camp.nextstep.edu.missionutils.Randoms; + +import java.util.List; + +public class Gaming { + private final int n; + private final List cars; + public Gaming(List cars, int n){ + this.cars = cars; + this.n = n; + } + + public void start() { + System.out.printf("%n실행 결과%n"); + for (int i=n;i>0;i--) { + for (Car car : cars) { + int ran = Randoms.pickNumberInRange(0,9); + final int movingNumber = 4; + if (ran >= movingNumber) {car.move();} + String howMove = "-".repeat(car.getMoveCount()); + System.out.printf("%s : %s%n", car.getName(),howMove); + } + System.out.println(" "); //한칸 띄기용 + } + } +} diff --git a/src/main/java/racingcar/InputValidator.java b/src/main/java/racingcar/InputValidator.java new file mode 100644 index 0000000..2e540c0 --- /dev/null +++ b/src/main/java/racingcar/InputValidator.java @@ -0,0 +1,35 @@ +package racingcar; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +public class InputValidator { + public List CarNamesValidator(String name) { + List cars = new ArrayList<>(); + for (String a : name.split(",")) { + CarNameValidator(a); + cars.add(new Car(a)); + } + Set dupCheck = new HashSet<>(); + for (Car c : cars){dupCheck.add(c.getName());} + if (dupCheck.size() != cars.size()) {throw new IllegalArgumentException("중복이름있음");} + return cars; + } + + private void CarNameValidator(String name) { + if (name.isEmpty()) {throw new IllegalArgumentException("왜안적음");} + if (name.length() > 5) {throw new IllegalArgumentException("이름5자초과됨");} + if (name.contains(" ")) {throw new IllegalArgumentException("공백포함됨");} + } + + public int IntegerValidator(String n) { + int count; + try {count = Integer.parseInt(n);} + catch (NumberFormatException e) {throw new IllegalArgumentException("숫자안적음");} + + if (count <= 0) {throw new IllegalArgumentException("0번이하");} + return count; + } +} diff --git a/src/main/java/racingcar/InputView.java b/src/main/java/racingcar/InputView.java new file mode 100644 index 0000000..9732ecb --- /dev/null +++ b/src/main/java/racingcar/InputView.java @@ -0,0 +1,15 @@ +package racingcar; + +import java.util.Scanner; + +public class InputView { + private final Scanner in = new Scanner(System.in); + public String inputCarName() { + System.out.println("경주할 자동차 이름을 입력하세요.(이름은 쉼표(,) 기준으로 구분)"); + return in.nextLine(); + } + public String inputRepeatN() { + System.out.println("시도할 회수는 몇회인가요?"); + return in.nextLine(); + } +} diff --git a/src/main/java/racingcar/Winner.java b/src/main/java/racingcar/Winner.java new file mode 100644 index 0000000..41ee7b7 --- /dev/null +++ b/src/main/java/racingcar/Winner.java @@ -0,0 +1,23 @@ +package racingcar; +import java.util.*; + +public class Winner { + private final List cars; + public Winner(List cars) { + this.cars = cars; + } + public List findWinner() { + int max = 0; + List winners = new ArrayList<>(); + for (Car car : cars) { + if (car.getMoveCount() > max) { + max = car.getMoveCount(); + winners.clear(); + winners.add(car.getName()); + } else if (car.getMoveCount() == max) { + winners.add(car.getName()); + } + } + return winners; + } +} \ No newline at end of file