diff --git a/src/main/java/racingcar/Application.java b/src/main/java/racingcar/Application.java index a17a52e..f0acbfc 100644 --- a/src/main/java/racingcar/Application.java +++ b/src/main/java/racingcar/Application.java @@ -1,7 +1,28 @@ package racingcar; +import java.util.ArrayList; + public class Application { public static void main(String[] args) { - // TODO: 프로그램 구현 - } + String[] carList = View.name(); + int num = View.count(); + + ArrayList cars = new ArrayList<>(); + for(String name : carList) { + cars.add(new Car(name)); + } + + System.out.println("실행 결과\n"); + + for(int i = 0; i < num; i++) { + for (Car car : cars) { + car.move(); + } + View.roundPrint(cars); + } + + View.getWinner(cars); + } + } + diff --git a/src/main/java/racingcar/Car.java b/src/main/java/racingcar/Car.java new file mode 100644 index 0000000..1ddd20a --- /dev/null +++ b/src/main/java/racingcar/Car.java @@ -0,0 +1,37 @@ +package racingcar; + +import java.util.Random; + +public class Car { + private String name; + private int position = 0; + + public Car(String name) { + if (name == null || name.trim().isEmpty() || name.length() > 5) { + throw new IllegalArgumentException("자동차 이름은 5자 이하만 가능합니다."); + } + this.name = name.trim(); + } + + public void move() { + Random rand = new Random(); + if(rand.nextInt(10) > 3) { + this.position++; + } + } + + public void status() { + System.out.print(this.name + " : "); + for(int i = 0; i < this.position; i++) { + System.out.print("-"); + } + } + + public String getName() { + return this.name; + } + + public int getPosition() { + return this.position; + } +} diff --git a/src/main/java/racingcar/View.java b/src/main/java/racingcar/View.java new file mode 100644 index 0000000..7b1a0d3 --- /dev/null +++ b/src/main/java/racingcar/View.java @@ -0,0 +1,60 @@ +package racingcar; + +import java.util.ArrayList; +import java.util.Scanner; + +public class View { + private static Scanner scanner = new Scanner(System.in); + + public static String[] name() { + System.out.println("경주할 자동차 이름을 입력하세요.(이름은 쉼표(,) 기준으로 구분)"); + return scanner.nextLine().split(","); + } + + public static int count() { + System.out.println("시도할 횟수는 몇회인가요?"); + String tryNum = scanner.nextLine(); + try { + if(tryNum.trim().isEmpty()) { + throw new IllegalArgumentException("시도 횟수는 빈 칸일 수 없습니다."); + } + int num = Integer.parseInt(tryNum.trim()); + if (num < 1) { + throw new IllegalArgumentException("시도 횟수는 1 이상이어야 합니다."); + } + return num; + } catch (NumberFormatException e) { + throw new IllegalArgumentException("시도 횟수는 숫자만 입력 가능합니다."); + } + + } + + public static void roundPrint(ArrayList cars) { + for(Car car : cars) { + car.status(); + System.out.println(); + } + System.out.println(); + } + + public static void getWinner(ArrayList cars) { + int maxPosition = 0; + for(Car car : cars) { + if(car.getPosition() >= maxPosition) { + maxPosition = car.getPosition(); + } + } + + ArrayList winners = new ArrayList<>(); + for(Car car : cars) { + if(car.getPosition() == maxPosition) { + winners.add(car.getName()); + } + } + + System.out.print("최종 우승자 : "); + String result = String.join(", ", winners); + System.out.println(result); + } + +}