diff --git a/README.md b/README.md index d0286c8..8ed4359 100644 --- a/README.md +++ b/README.md @@ -1 +1,14 @@ # java-racingcar-precourse +1. 자동차 이름 정하고 생성하는 함수(이름은 쉼표 기준으로 구분) +입력 : pobi,woni,jun + +2. 쉼표로 문자열 나누기 + +3. 시도할 횟수 받기 +만약 횟수가 0이하이면 오류 + +4. 경주 하기 +자동차의 수가 4이상이면 -출력하고 자동차가 얼마나 움직이는지를 저장하는 int형 변수에 +1하기 +반환 : 1등 자동차 이름 + +5. 결과 출력 \ No newline at end of file diff --git a/src/main/java/racingcar/Application.java b/src/main/java/racingcar/Application.java index a17a52e..3dfc0a8 100644 --- a/src/main/java/racingcar/Application.java +++ b/src/main/java/racingcar/Application.java @@ -1,7 +1,98 @@ package racingcar; +import camp.nextstep.edu.missionutils.Randoms; +import camp.nextstep.edu.missionutils.Console; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + public class Application { + public static class Car{ + //1. 자동차 이름을 검수하고 쉼표를 기준으로 나누는 함수 + public static List cut(String input){ + if (input == null || input.trim().isEmpty()) { + throw new IllegalArgumentException("error"); + } + + List carList = new ArrayList<>(Arrays.asList(input.split(","))); + + for (String carName : carList) { + carName = carName.trim(); // 공백 제거 + if (carName.isEmpty()) { + throw new IllegalArgumentException("error"); + } + if (carName.length() > 5) { + throw new IllegalArgumentException("error"); + } + } + return carList; + } + } + + public static class Play { + // 자동차 이동 여부 결정 + public static boolean isMovable() { + return Randoms.pickNumberInRange(0, 9) >= 4; + } + + // 이동 거리 출력 + public static String getDistanceString(int distance) { + return "-".repeat(distance); + } + + // 자동차 이동 및 출력 + public static void print(List carList, int[] carDistances) { + for (int i = 0; i < carList.size(); i++) { + if (isMovable()) { + carDistances[i]++; + } + + System.out.println(carList.get(i) + " : " + getDistanceString(carDistances[i])); + } + System.out.println(); + } + } + + public static void printWinners(List carNames, int[] carDistances) { + int maxDistance = Arrays.stream(carDistances).max().orElse(0); + List winners = new ArrayList<>(); + + for (int i = 0; i < carNames.size(); i++) { + if (carDistances[i] == maxDistance) { + winners.add(carNames.get(i)); + } + } + + // 우승자 출력 + System.out.println("final winner : " + String.join(", ", winners)); + } + + public static void main(String[] args) { - // TODO: 프로그램 구현 + System.out.println("Input String: "); + String input = Console.readLine(); + + //자동차 생성 및 이름 리스트로 저장 및 배열 크기 구하기 + List carNames = Car.cut(input); + int carNamesSize = carNames.size(); + + //시도할 횟수 받기 + System.out.println("Input number of times: "); + int tryNumber = Integer.parseInt(Console.readLine()); + if(tryNumber<1){ //횟수가 0이거나 음수일 수 없음 + throw new IllegalArgumentException("error"); + } + + //자동차가 움직이는 횟수 저장하는 int형 배열 생성 + int[] carDistances = new int[carNamesSize]; + + //경주하기 + for (int i = 0; i < tryNumber; i++) { + Play.print(carNames, carDistances); + } + + //우승자 출력 + printWinners(carNames, carDistances); } }