diff --git a/docs/README.md b/docs/README.md index e69de29b..fa72d5e2 100644 --- a/docs/README.md +++ b/docs/README.md @@ -0,0 +1,15 @@ +자동차 이름을 입력 + +입력받은 문장 쪼개기 + +예외처리 + +게임 횟수 입력 + +게임 진행 출력 및 랜덤 계산 + +우승자 찾기 + +우승자 출력 + +Test추가 \ No newline at end of file diff --git a/src/main/java/racingcar/Application.java b/src/main/java/racingcar/Application.java index a17a52e7..025eace2 100644 --- a/src/main/java/racingcar/Application.java +++ b/src/main/java/racingcar/Application.java @@ -1,7 +1,106 @@ package racingcar; +import camp.nextstep.edu.missionutils.Randoms; +import org.junit.jupiter.api.Test; + +import java.util.ArrayList; +import java.util.List; + +import static camp.nextstep.edu.missionutils.Console.readLine; +import static org.assertj.core.api.Assertions.assertThat; + + public class Application { + + @Test + void test() { + String input = "1,2,3,45"; + String[] result = input.split(","); + + assertThat(result).contains("45","3","2", "1"); + assertThat(result).containsExactly("1","2","3", "45"); + } + public static void main(String[] args) { - // TODO: 프로그램 구현 + System.out.println("경주할 자동차 이름을 입력하세요.(이름은 쉼표(,) 기준으로 구분)"); + String userInput = readLine().trim(); + List carNames = new ArrayList<>(); + + for (String name : userInput.split(",")) { + carNames.add(name.trim()); + } + + //예외처리--------------------------------------------------- + try { + for (String Name : carNames) { + if (Name.length() > 5) { + throw new IllegalArgumentException(); + } + } + } catch (IllegalArgumentException e) { + return; + } + + System.out.println("시도할 회수는 몇회인가요?"); + String count1 = readLine(); + int count = Integer.parseInt(count1); + + System.out.println("실행 결과"); + + //경주준비------------------------------------------------- + List score = new ArrayList<>(); + String line; + + for (String Name1 : carNames) { + score.add(0); + } + + //경주시작------------------------------------------------- + int ssc = 0; + for (int i = 0; i < count * carNames.size(); i++) { + + if (ssc == carNames.size()) { + ssc = 0; + } + + //랜덤계산------------------------------------------------- + int randomInt = Randoms.pickNumberInRange(0, 9); + if (randomInt > 3) { + score.set(ssc, score.get(ssc) + 1); + } + ssc = ssc + 1; + } + + //1등 찾기-------------------------------------------------------------- + int rank1 = 1; + int rank2 = 0; + for (int k = 0; score.size() - 1 > k; k++) { + rank2 = Math.max(score.get(k), score.get(k + 1)); + if (rank2>rank1){ + rank1=rank2; + } + } + + if (carNames.size()==1){ + rank1=score.get(0); + } + + //출력------------------------------------------------- + for (int k = 0; score.size() > k; k++) { + line = "-".repeat(score.get(k)); + System.out.println(carNames.get(k) + " : " + line); + } + System.out.println(""); + + // 1등 출력--------------------------------------------------- + List winner = new ArrayList<>(); + for (int k = 0; score.size()> k; k++) { + if (rank1== score.get(k)){ + winner.add(carNames.get(k)); + } + } + System.out.print("최종 우승자 : " + String.join(" ,", winner)); + } } + diff --git a/src/test/java/racingcar/ApplicationTest.java b/src/test/java/racingcar/ApplicationTest.java index 764ba4c6..a4f0b1b8 100644 --- a/src/test/java/racingcar/ApplicationTest.java +++ b/src/test/java/racingcar/ApplicationTest.java @@ -15,11 +15,11 @@ class ApplicationTest extends NsTest { @Test void 전진_정지() { assertRandomNumberInRangeTest( - () -> { - run("pobi,woni", "1"); - assertThat(output()).contains("pobi : -", "woni : ", "최종 우승자 : pobi"); - }, - MOVING_FORWARD, STOP + () -> { + run("pobi,woni", "1"); + assertThat(output()).contains("pobi : -", "woni : ", "최종 우승자 : pobi"); + }, + MOVING_FORWARD, STOP ); } @@ -35,4 +35,4 @@ class ApplicationTest extends NsTest { public void runMain() { Application.main(new String[]{}); } -} +} \ No newline at end of file