From 7bfb034d967e099e16173641daac25733a77ae9f Mon Sep 17 00:00:00 2001 From: player7571 Date: Sat, 7 Sep 2024 11:47:59 +0900 Subject: [PATCH 01/13] =?UTF-8?q?feat:=20=EA=B2=BD=EC=A3=BC=ED=95=A0=20?= =?UTF-8?q?=EC=9E=90=EB=8F=99=EC=B0=A8=20=EC=9E=85=EB=A0=A5=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/racingcar/Application.java | 4 ++++ src/main/java/racingcar/Model.java | 19 +++++++++++++++++++ src/main/java/racingcar/View.java | 15 +++++++++++++++ 3 files changed, 38 insertions(+) create mode 100644 src/main/java/racingcar/Model.java create mode 100644 src/main/java/racingcar/View.java diff --git a/src/main/java/racingcar/Application.java b/src/main/java/racingcar/Application.java index a17a52e..55e88d1 100644 --- a/src/main/java/racingcar/Application.java +++ b/src/main/java/racingcar/Application.java @@ -3,5 +3,9 @@ public class Application { public static void main(String[] args) { // TODO: 프로그램 구현 + View view = new View(); + Model model = new Model(); + + model.saveCarName(view.inputCarName()); } } diff --git a/src/main/java/racingcar/Model.java b/src/main/java/racingcar/Model.java new file mode 100644 index 0000000..95ef06f --- /dev/null +++ b/src/main/java/racingcar/Model.java @@ -0,0 +1,19 @@ +package racingcar; + +import java.util.StringTokenizer; + +public class Model { + String[] car; + + void saveCarName(String input){ + StringTokenizer st = new StringTokenizer(input); + car = new String[st.countTokens()]; + for(int i=0; i5) throw new IllegalArgumentException("5글자 이하로 작성"); + car[i] = str; + } + } + + +} diff --git a/src/main/java/racingcar/View.java b/src/main/java/racingcar/View.java new file mode 100644 index 0000000..8a8674c --- /dev/null +++ b/src/main/java/racingcar/View.java @@ -0,0 +1,15 @@ +package racingcar; + +import java.io.InputStreamReader; +import java.util.Scanner; + +public class View { + + String inputCarName(){ + System.out.println("경주할 자동차 이름을 입력하세요.(이름은 쉼표(,)기준으로 구분)"); + Scanner sc = new Scanner(new InputStreamReader(System.in)); + return sc.next(); + } + + +} From 906e134833eae1c0a3e9ba4820c618286f3c9f7f Mon Sep 17 00:00:00 2001 From: player7571 Date: Sat, 7 Sep 2024 11:59:35 +0900 Subject: [PATCH 02/13] =?UTF-8?q?feat:=20=EC=8B=9C=EB=8F=84=ED=9A=8C?= =?UTF-8?q?=EC=88=98=20=EC=9E=85=EB=A0=A5=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/racingcar/Model.java | 12 ++++++++++++ src/main/java/racingcar/View.java | 6 ++++++ 2 files changed, 18 insertions(+) diff --git a/src/main/java/racingcar/Model.java b/src/main/java/racingcar/Model.java index 95ef06f..01f8da4 100644 --- a/src/main/java/racingcar/Model.java +++ b/src/main/java/racingcar/Model.java @@ -4,8 +4,10 @@ public class Model { String[] car; + int numberOfAttempts; void saveCarName(String input){ + StringTokenizer st = new StringTokenizer(input); car = new String[st.countTokens()]; for(int i=0; i5) throw new IllegalArgumentException("5글자 이하로 작성"); car[i] = str; } + } + void saveNumberOfAttempts(String input){ + + try { + numberOfAttempts = Integer.parseInt(input); + } catch (Exception e){ + System.out.println("숫자를 입력하세요"); + } + + } } diff --git a/src/main/java/racingcar/View.java b/src/main/java/racingcar/View.java index 8a8674c..42c1dd3 100644 --- a/src/main/java/racingcar/View.java +++ b/src/main/java/racingcar/View.java @@ -11,5 +11,11 @@ String inputCarName(){ return sc.next(); } + String inputNumberOfAttempts(){ + System.out.println("시도할 회수는 몇회인가요?"); + Scanner sc = new Scanner(new InputStreamReader(System.in)); + return sc.next(); + } + } From 249d53f4e39fd9e3e4784636a3d75ad5a1788d15 Mon Sep 17 00:00:00 2001 From: player7571 Date: Sat, 7 Sep 2024 14:16:12 +0900 Subject: [PATCH 03/13] =?UTF-8?q?feat:=20=EC=8B=A4=ED=96=89=20=EA=B2=B0?= =?UTF-8?q?=EA=B3=BC=20=EC=B6=9C=EB=A0=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/racingcar/Application.java | 4 ++++ src/main/java/racingcar/Model.java | 21 ++++++++++++++++++++- src/main/java/racingcar/View.java | 8 ++++++++ 3 files changed, 32 insertions(+), 1 deletion(-) diff --git a/src/main/java/racingcar/Application.java b/src/main/java/racingcar/Application.java index 55e88d1..add333c 100644 --- a/src/main/java/racingcar/Application.java +++ b/src/main/java/racingcar/Application.java @@ -7,5 +7,9 @@ public static void main(String[] args) { Model model = new Model(); model.saveCarName(view.inputCarName()); + + model.saveNumberOfAttempts(view.inputNumberOfAttempts()); + + view.printResult(model); } } diff --git a/src/main/java/racingcar/Model.java b/src/main/java/racingcar/Model.java index 01f8da4..b15b95e 100644 --- a/src/main/java/racingcar/Model.java +++ b/src/main/java/racingcar/Model.java @@ -1,15 +1,19 @@ package racingcar; +import java.util.Random; import java.util.StringTokenizer; public class Model { String[] car; + int[] len; int numberOfAttempts; + int max; void saveCarName(String input){ - StringTokenizer st = new StringTokenizer(input); + StringTokenizer st = new StringTokenizer(input, ","); car = new String[st.countTokens()]; + len = new int[st.countTokens()]; for(int i=0; i5) throw new IllegalArgumentException("5글자 이하로 작성"); @@ -28,4 +32,19 @@ void saveNumberOfAttempts(String input){ } + StringBuilder race(Model model){ + StringBuilder sb = new StringBuilder(); + Random random = new Random(); + for (int i = 0; i < model.car.length; i++) { + int rand = random.nextInt(10); + if(rand>=4) model.len[i]++; + sb.append(model.car[i]).append(" : "); + sb.append("-".repeat(Math.max(0, model.len[i]))); + sb.append("\n"); + model.max = Math.max(model.len[i], model.max); + } + + return sb; + } + } diff --git a/src/main/java/racingcar/View.java b/src/main/java/racingcar/View.java index 42c1dd3..8c24ab1 100644 --- a/src/main/java/racingcar/View.java +++ b/src/main/java/racingcar/View.java @@ -17,5 +17,13 @@ String inputNumberOfAttempts(){ return sc.next(); } + void printResult(Model model){ + System.out.println("\n실행 결과"); + model.max = 0; + model.len = new int[model.car.length]; + while (model.numberOfAttempts --> 0) { + System.out.println(model.race(model)); + } + } } From cc79944ed0f1c09ae720110573fbee4f2b6e774b Mon Sep 17 00:00:00 2001 From: player7571 Date: Sat, 7 Sep 2024 14:26:49 +0900 Subject: [PATCH 04/13] =?UTF-8?q?feat:=20=EC=9A=B0=EC=8A=B9=EC=9E=90=20?= =?UTF-8?q?=EC=B6=9C=EB=A0=A5=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/racingcar/Application.java | 2 ++ src/main/java/racingcar/Model.java | 15 +++++++++++++++ src/main/java/racingcar/View.java | 5 +++++ 3 files changed, 22 insertions(+) diff --git a/src/main/java/racingcar/Application.java b/src/main/java/racingcar/Application.java index add333c..0d7b9ab 100644 --- a/src/main/java/racingcar/Application.java +++ b/src/main/java/racingcar/Application.java @@ -11,5 +11,7 @@ public static void main(String[] args) { model.saveNumberOfAttempts(view.inputNumberOfAttempts()); view.printResult(model); + + view.printWinner(model); } } diff --git a/src/main/java/racingcar/Model.java b/src/main/java/racingcar/Model.java index b15b95e..1762ef1 100644 --- a/src/main/java/racingcar/Model.java +++ b/src/main/java/racingcar/Model.java @@ -47,4 +47,19 @@ StringBuilder race(Model model){ return sb; } + StringBuilder findWinner(Model model){ + StringBuilder sb = new StringBuilder(); + boolean jointWinner = false; + for(int i=0; i Date: Sat, 7 Sep 2024 14:33:28 +0900 Subject: [PATCH 05/13] =?UTF-8?q?fix:=20=ED=95=84=EC=9A=94=EC=97=86?= =?UTF-8?q?=EB=8A=94=20=EB=A7=A4=EA=B0=9C=EB=B3=80=EC=88=98=20=EC=82=AD?= =?UTF-8?q?=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/racingcar/Model.java | 14 +++++++------- src/main/java/racingcar/View.java | 4 ++-- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/main/java/racingcar/Model.java b/src/main/java/racingcar/Model.java index 1762ef1..e4fe5c8 100644 --- a/src/main/java/racingcar/Model.java +++ b/src/main/java/racingcar/Model.java @@ -32,22 +32,22 @@ void saveNumberOfAttempts(String input){ } - StringBuilder race(Model model){ + StringBuilder race(){ StringBuilder sb = new StringBuilder(); Random random = new Random(); - for (int i = 0; i < model.car.length; i++) { + for (int i = 0; i < car.length; i++) { int rand = random.nextInt(10); - if(rand>=4) model.len[i]++; - sb.append(model.car[i]).append(" : "); - sb.append("-".repeat(Math.max(0, model.len[i]))); + if(rand>=4) len[i]++; + sb.append(car[i]).append(" : "); + sb.append("-".repeat(Math.max(0, len[i]))); sb.append("\n"); - model.max = Math.max(model.len[i], model.max); + max = Math.max(len[i], max); } return sb; } - StringBuilder findWinner(Model model){ + StringBuilder findWinner(){ StringBuilder sb = new StringBuilder(); boolean jointWinner = false; for(int i=0; i 0) { - System.out.println(model.race(model)); + System.out.println(model.race()); } } void printWinner(Model model){ System.out.print("최종 우승자 : "); - System.out.println(model.findWinner(model)); + System.out.println(model.findWinner()); } } From 3405b0567063ea0c53a2f9bcdbb5535d28406904 Mon Sep 17 00:00:00 2001 From: player7571 Date: Sat, 7 Sep 2024 14:57:10 +0900 Subject: [PATCH 06/13] =?UTF-8?q?fix:=20=EC=A4=91=EB=B3=B5=20=EC=BD=94?= =?UTF-8?q?=EB=93=9C=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/racingcar/Model.java | 6 ++---- src/main/java/racingcar/View.java | 2 -- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/src/main/java/racingcar/Model.java b/src/main/java/racingcar/Model.java index e4fe5c8..692bdc3 100644 --- a/src/main/java/racingcar/Model.java +++ b/src/main/java/racingcar/Model.java @@ -7,7 +7,7 @@ public class Model { String[] car; int[] len; int numberOfAttempts; - int max; + int max = 0; void saveCarName(String input){ @@ -52,9 +52,7 @@ StringBuilder findWinner(){ boolean jointWinner = false; for(int i=0; i 0) { System.out.println(model.race()); } From 46f9f20c2093642dd1aa7061fc59e24771245f98 Mon Sep 17 00:00:00 2001 From: player7571 Date: Sat, 7 Sep 2024 15:05:46 +0900 Subject: [PATCH 07/13] add README.md --- docs/README.md | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/docs/README.md b/docs/README.md index e69de29..20b0acd 100644 --- a/docs/README.md +++ b/docs/README.md @@ -0,0 +1,16 @@ +# 기능 명세서 + +## + +경주할 자동차 이름을 쉼표로 구분해 입력받음 +5자 이하가 아닐 시 에러발생 + +사용자가 몇 번의 이동을 할 것인지 입력받음 +숫자가 아닌걸 입력하면 에러 발생 + +입력받은 이동 횟수만큼 반복 +각 자동차마다 0부터 9까지 무작위 숫자를 random()으로 뽑아서 5가 넘을경우 한칸 앞으로 +현재 각각 자동차가 얼마나 앞으로 갔는지 출력 + +최종 우승자가 여러명이면 쉼표로 구분해 출력 아니면 그냥 출력 + From df2a5a2cbc45eddbc9eb48c7d8da30fe7552a744 Mon Sep 17 00:00:00 2001 From: player7571 Date: Sat, 7 Sep 2024 15:17:25 +0900 Subject: [PATCH 08/13] =?UTF-8?q?fix:=20=EB=9D=BC=EC=9D=B4=EB=B8=8C?= =?UTF-8?q?=EB=9F=AC=EB=A6=AC=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/racingcar/Model.java | 4 +++- src/main/java/racingcar/View.java | 8 ++++---- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/main/java/racingcar/Model.java b/src/main/java/racingcar/Model.java index 692bdc3..9ff1f9e 100644 --- a/src/main/java/racingcar/Model.java +++ b/src/main/java/racingcar/Model.java @@ -1,5 +1,7 @@ package racingcar; +import camp.nextstep.edu.missionutils.Randoms; + import java.util.Random; import java.util.StringTokenizer; @@ -36,7 +38,7 @@ StringBuilder race(){ StringBuilder sb = new StringBuilder(); Random random = new Random(); for (int i = 0; i < car.length; i++) { - int rand = random.nextInt(10); + int rand = Randoms.pickNumberInRange(0, 9); if(rand>=4) len[i]++; sb.append(car[i]).append(" : "); sb.append("-".repeat(Math.max(0, len[i]))); diff --git a/src/main/java/racingcar/View.java b/src/main/java/racingcar/View.java index f6b1687..4aab060 100644 --- a/src/main/java/racingcar/View.java +++ b/src/main/java/racingcar/View.java @@ -1,5 +1,7 @@ package racingcar; +import camp.nextstep.edu.missionutils.Console; + import java.io.InputStreamReader; import java.util.Scanner; @@ -7,14 +9,12 @@ public class View { String inputCarName(){ System.out.println("경주할 자동차 이름을 입력하세요.(이름은 쉼표(,)기준으로 구분)"); - Scanner sc = new Scanner(new InputStreamReader(System.in)); - return sc.next(); + return Console.readLine(); } String inputNumberOfAttempts(){ System.out.println("시도할 회수는 몇회인가요?"); - Scanner sc = new Scanner(new InputStreamReader(System.in)); - return sc.next(); + return Console.readLine(); } void printResult(Model model){ From 7e93bb7a060e746bee415b09244032500b4ab298 Mon Sep 17 00:00:00 2001 From: player7571 Date: Sat, 7 Sep 2024 15:36:29 +0900 Subject: [PATCH 09/13] =?UTF-8?q?style:=20=EC=BD=94=EB=93=9C=20=EC=A0=95?= =?UTF-8?q?=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/racingcar/Model.java | 7 +++---- src/main/java/racingcar/View.java | 3 --- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/src/main/java/racingcar/Model.java b/src/main/java/racingcar/Model.java index 9ff1f9e..8eada4c 100644 --- a/src/main/java/racingcar/Model.java +++ b/src/main/java/racingcar/Model.java @@ -36,13 +36,12 @@ void saveNumberOfAttempts(String input){ StringBuilder race(){ StringBuilder sb = new StringBuilder(); - Random random = new Random(); for (int i = 0; i < car.length; i++) { int rand = Randoms.pickNumberInRange(0, 9); if(rand>=4) len[i]++; - sb.append(car[i]).append(" : "); - sb.append("-".repeat(Math.max(0, len[i]))); - sb.append("\n"); + sb.append(car[i]).append(" : ") + .append("-".repeat(Math.max(0, len[i]))) + .append("\n"); max = Math.max(len[i], max); } diff --git a/src/main/java/racingcar/View.java b/src/main/java/racingcar/View.java index 4aab060..5d76fad 100644 --- a/src/main/java/racingcar/View.java +++ b/src/main/java/racingcar/View.java @@ -2,9 +2,6 @@ import camp.nextstep.edu.missionutils.Console; -import java.io.InputStreamReader; -import java.util.Scanner; - public class View { String inputCarName(){ From 858e14a538d3d8df52b29868931e9210f87a762a Mon Sep 17 00:00:00 2001 From: player7571 Date: Sat, 7 Sep 2024 17:06:38 +0900 Subject: [PATCH 10/13] =?UTF-8?q?fix:=20=ED=94=BC=EB=93=9C=EB=B0=B1=20?= =?UTF-8?q?=EB=B0=94=ED=83=95=EC=9C=BC=EB=A1=9C=20=EB=B3=80=EC=88=98?= =?UTF-8?q?=EB=AA=85=20=EB=B3=80=EA=B2=BD,=20=EC=9D=B4=EB=8F=99=EA=B1=B0?= =?UTF-8?q?=EB=A6=AC=EB=B0=8F=20=EC=B5=9C=EB=8C=80=20=EC=9D=B4=EB=8F=99?= =?UTF-8?q?=EA=B1=B0=EB=A6=AC=20=EC=B5=9C=EC=8B=A0=ED=99=94=20=ED=95=98?= =?UTF-8?q?=EB=8A=94=20=EB=A9=94=EC=84=9C=EB=93=9C=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/racingcar/Application.java | 4 +-- src/main/java/racingcar/Model.java | 45 ++++++++++++++++-------- src/main/java/racingcar/View.java | 10 +++--- 3 files changed, 36 insertions(+), 23 deletions(-) diff --git a/src/main/java/racingcar/Application.java b/src/main/java/racingcar/Application.java index 0d7b9ab..4196bee 100644 --- a/src/main/java/racingcar/Application.java +++ b/src/main/java/racingcar/Application.java @@ -10,8 +10,8 @@ public static void main(String[] args) { model.saveNumberOfAttempts(view.inputNumberOfAttempts()); - view.printResult(model); + view.printResult(model.race()); - view.printWinner(model); + view.printWinner(model.findWinner()); } } diff --git a/src/main/java/racingcar/Model.java b/src/main/java/racingcar/Model.java index 8eada4c..2678610 100644 --- a/src/main/java/racingcar/Model.java +++ b/src/main/java/racingcar/Model.java @@ -1,24 +1,24 @@ package racingcar; import camp.nextstep.edu.missionutils.Randoms; - -import java.util.Random; import java.util.StringTokenizer; public class Model { String[] car; - int[] len; + int[] distance; int numberOfAttempts; - int max = 0; + int maxDistance = 0; void saveCarName(String input){ StringTokenizer st = new StringTokenizer(input, ","); car = new String[st.countTokens()]; - len = new int[st.countTokens()]; + distance = new int[st.countTokens()]; for(int i=0; i5) throw new IllegalArgumentException("5글자 이하로 작성"); + if(str.length()>5) { + throw new IllegalArgumentException("5글자 이하로 작성"); + } car[i] = str; } @@ -36,13 +36,16 @@ void saveNumberOfAttempts(String input){ StringBuilder race(){ StringBuilder sb = new StringBuilder(); - for (int i = 0; i < car.length; i++) { - int rand = Randoms.pickNumberInRange(0, 9); - if(rand>=4) len[i]++; - sb.append(car[i]).append(" : ") - .append("-".repeat(Math.max(0, len[i]))) - .append("\n"); - max = Math.max(len[i], max); + while (numberOfAttempts --> 0) { + for (int i = 0; i < car.length; i++) { + int rand = Randoms.pickNumberInRange(0, 9); + updateDistance(rand, i); + sb.append(car[i]).append(" : ") + .append("-".repeat(Math.max(0, distance[i]))) + .append("\n"); + updateMaxValue(maxDistance, i); + } + sb.append("\n"); } return sb; @@ -52,8 +55,10 @@ StringBuilder findWinner(){ StringBuilder sb = new StringBuilder(); boolean jointWinner = false; for(int i=0; i=4) { + distance[i]++; + } + } + + void updateMaxValue(int max, int i){ + maxDistance = Math.max(distance[i], max); + } + } diff --git a/src/main/java/racingcar/View.java b/src/main/java/racingcar/View.java index 5d76fad..9383290 100644 --- a/src/main/java/racingcar/View.java +++ b/src/main/java/racingcar/View.java @@ -14,16 +14,14 @@ String inputNumberOfAttempts(){ return Console.readLine(); } - void printResult(Model model){ + void printResult(StringBuilder sb){ System.out.println("\n실행 결과"); - while (model.numberOfAttempts --> 0) { - System.out.println(model.race()); - } + System.out.println(sb); } - void printWinner(Model model){ + void printWinner(StringBuilder sb){ System.out.print("최종 우승자 : "); - System.out.println(model.findWinner()); + System.out.println(sb); } } From 06a7da132c0f546972e7a7c63ac1e110025770e3 Mon Sep 17 00:00:00 2001 From: player7571 Date: Sat, 7 Sep 2024 17:25:34 +0900 Subject: [PATCH 11/13] =?UTF-8?q?fix:=20=EC=9A=B0=EC=8A=B9=EC=9E=90?= =?UTF-8?q?=EB=A5=BC=20=EC=A0=84=EB=B6=80=20=EB=BD=91=EC=9D=80=20=ED=9B=84?= =?UTF-8?q?=20=ED=95=9C=EB=B2=88=EC=97=90=20=EB=AC=B8=EC=9E=90=EC=97=B4?= =?UTF-8?q?=EB=A1=9C=20=EB=B0=98=ED=99=98=ED=95=98=EB=8F=84=EB=A1=9D=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/racingcar/Model.java | 15 ++++++--------- src/main/java/racingcar/View.java | 4 ++-- 2 files changed, 8 insertions(+), 11 deletions(-) diff --git a/src/main/java/racingcar/Model.java b/src/main/java/racingcar/Model.java index 2678610..348258c 100644 --- a/src/main/java/racingcar/Model.java +++ b/src/main/java/racingcar/Model.java @@ -1,6 +1,8 @@ package racingcar; import camp.nextstep.edu.missionutils.Randoms; + +import java.util.ArrayList; import java.util.StringTokenizer; public class Model { @@ -51,19 +53,14 @@ StringBuilder race(){ return sb; } - StringBuilder findWinner(){ - StringBuilder sb = new StringBuilder(); - boolean jointWinner = false; + String findWinner(){ + ArrayList winners = new ArrayList<>(); for(int i=0; i Date: Sat, 7 Sep 2024 18:55:22 +0900 Subject: [PATCH 12/13] =?UTF-8?q?fix:=20car[]=20distance[]=20=EB=B0=B0?= =?UTF-8?q?=EC=97=B4=20=EC=A0=9C=EA=B1=B0=20=ED=9B=84=20Car=20=EA=B0=9D?= =?UTF-8?q?=EC=B2=B4=20=EC=B6=94=EA=B0=80=20=ED=9B=84=20=EC=BD=94=EB=93=9C?= =?UTF-8?q?=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/racingcar/Car.java | 22 +++++++++++++ src/main/java/racingcar/Model.java | 52 +++++++++++++----------------- src/main/java/racingcar/View.java | 11 +++++-- 3 files changed, 54 insertions(+), 31 deletions(-) create mode 100644 src/main/java/racingcar/Car.java diff --git a/src/main/java/racingcar/Car.java b/src/main/java/racingcar/Car.java new file mode 100644 index 0000000..29493c0 --- /dev/null +++ b/src/main/java/racingcar/Car.java @@ -0,0 +1,22 @@ +package racingcar; + +public class Car { + + final String name; + int distance; + + public Car(String name){ + this.name = name; + } + + public void addDistance(int rand){ + if(rand>=4){ + distance++; + } + } + + public boolean sameDistance(int distance){ + return this.distance==distance; + } + +} diff --git a/src/main/java/racingcar/Model.java b/src/main/java/racingcar/Model.java index 348258c..0b2b35f 100644 --- a/src/main/java/racingcar/Model.java +++ b/src/main/java/racingcar/Model.java @@ -1,27 +1,27 @@ package racingcar; import camp.nextstep.edu.missionutils.Randoms; - import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; import java.util.StringTokenizer; public class Model { - String[] car; - int[] distance; + int numberOfAttempts; int maxDistance = 0; + ArrayList carList; void saveCarName(String input){ StringTokenizer st = new StringTokenizer(input, ","); - car = new String[st.countTokens()]; - distance = new int[st.countTokens()]; - for(int i=0; i5) { + carList = new ArrayList<>(); + while (st.hasMoreTokens()){ + String name = st.nextToken(); + if(name.length()>5) { throw new IllegalArgumentException("5글자 이하로 작성"); } - car[i] = str; + carList.add(new Car(name)); } } @@ -36,41 +36,35 @@ void saveNumberOfAttempts(String input){ } - StringBuilder race(){ - StringBuilder sb = new StringBuilder(); + Map race(){ + + Map result = new HashMap<>(); + while (numberOfAttempts --> 0) { - for (int i = 0; i < car.length; i++) { + for (Car list : carList) { int rand = Randoms.pickNumberInRange(0, 9); - updateDistance(rand, i); - sb.append(car[i]).append(" : ") - .append("-".repeat(Math.max(0, distance[i]))) - .append("\n"); - updateMaxValue(maxDistance, i); + list.addDistance(rand); + result.put(list.name, list.distance); + updateMaxValue(maxDistance, list.distance); } - sb.append("\n"); } - return sb; + return result; } String findWinner(){ ArrayList winners = new ArrayList<>(); - for(int i=0; i=4) { - distance[i]++; - } - } - void updateMaxValue(int max, int i){ - maxDistance = Math.max(distance[i], max); + void updateMaxValue(int max, int distance){ + maxDistance = Math.max(distance, max); } } diff --git a/src/main/java/racingcar/View.java b/src/main/java/racingcar/View.java index 3966007..cf92f9e 100644 --- a/src/main/java/racingcar/View.java +++ b/src/main/java/racingcar/View.java @@ -1,6 +1,7 @@ package racingcar; import camp.nextstep.edu.missionutils.Console; +import java.util.Map; public class View { @@ -14,8 +15,14 @@ String inputNumberOfAttempts(){ return Console.readLine(); } - void printResult(StringBuilder sb){ - System.out.println("\n실행 결과"); + void printResult(Map result){ + + StringBuilder sb = new StringBuilder(); + sb.append("\n실행 결과\n\n"); + + result.forEach((name, distance)-> sb.append(name).append(" : ") + .append("-".repeat(distance)) + .append("\n")); System.out.println(sb); } From 468d82b71cc7dd6862ce4f67cc233280779dca2b Mon Sep 17 00:00:00 2001 From: player7571 Date: Sat, 7 Sep 2024 18:57:38 +0900 Subject: [PATCH 13/13] =?UTF-8?q?feat:=20controller=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/racingcar/Application.java | 12 ++---------- src/main/java/racingcar/Controller.java | 18 ++++++++++++++++++ 2 files changed, 20 insertions(+), 10 deletions(-) create mode 100644 src/main/java/racingcar/Controller.java diff --git a/src/main/java/racingcar/Application.java b/src/main/java/racingcar/Application.java index 4196bee..76028d5 100644 --- a/src/main/java/racingcar/Application.java +++ b/src/main/java/racingcar/Application.java @@ -3,15 +3,7 @@ public class Application { public static void main(String[] args) { // TODO: 프로그램 구현 - View view = new View(); - Model model = new Model(); - - model.saveCarName(view.inputCarName()); - - model.saveNumberOfAttempts(view.inputNumberOfAttempts()); - - view.printResult(model.race()); - - view.printWinner(model.findWinner()); + Controller controller = new Controller(); + controller.run(); } } diff --git a/src/main/java/racingcar/Controller.java b/src/main/java/racingcar/Controller.java new file mode 100644 index 0000000..40b2cad --- /dev/null +++ b/src/main/java/racingcar/Controller.java @@ -0,0 +1,18 @@ +package racingcar; + +public class Controller { + + Model model = new Model(); + View view = new View(); + + void run(){ + model.saveCarName(view.inputCarName()); + + model.saveNumberOfAttempts(view.inputNumberOfAttempts()); + + view.printResult(model.race()); + + view.printWinner(model.findWinner()); + } + +}