From 38c2f2e0802f60440b2ad0ebc674445a3a6b3cbc Mon Sep 17 00:00:00 2001 From: LTSGOD <78635028+LTSGOD@users.noreply.github.com> Date: Sat, 14 Jan 2023 15:02:33 +0900 Subject: [PATCH 01/29] Create docs --- docs | 1 + 1 file changed, 1 insertion(+) create mode 100644 docs diff --git a/docs b/docs new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/docs @@ -0,0 +1 @@ + From 70f84b721e4b3aa481b9152624a53648bd36dbd3 Mon Sep 17 00:00:00 2001 From: LTSGOD <78635028+LTSGOD@users.noreply.github.com> Date: Sat, 14 Jan 2023 15:02:51 +0900 Subject: [PATCH 02/29] Delete docs --- docs | 1 - 1 file changed, 1 deletion(-) delete mode 100644 docs diff --git a/docs b/docs deleted file mode 100644 index 8b13789179..0000000000 --- a/docs +++ /dev/null @@ -1 +0,0 @@ - From c60909fd34a8ccf310571a44da83505df49f5076 Mon Sep 17 00:00:00 2001 From: LTSGOD Date: Sat, 14 Jan 2023 15:32:38 +0900 Subject: [PATCH 03/29] docs addfolder --- docs/README.md.txt | 1 + 1 file changed, 1 insertion(+) create mode 100644 docs/README.md.txt diff --git a/docs/README.md.txt b/docs/README.md.txt new file mode 100644 index 0000000000..933dcafbb5 --- /dev/null +++ b/docs/README.md.txt @@ -0,0 +1 @@ +sfadf \ No newline at end of file From 24f3f1de053c9407f069c9752a8540a2843ea23a Mon Sep 17 00:00:00 2001 From: LTSGOD Date: Sat, 14 Jan 2023 21:08:29 +0900 Subject: [PATCH 04/29] InputClass Implementation --- src/main/java/racingcar/Application.java | 5 +- src/main/java/racingcar/Input.java | 63 ++++++++++++++++++++++++ 2 files changed, 67 insertions(+), 1 deletion(-) create mode 100644 src/main/java/racingcar/Input.java diff --git a/src/main/java/racingcar/Application.java b/src/main/java/racingcar/Application.java index b9ed0456a3..0f18914d32 100644 --- a/src/main/java/racingcar/Application.java +++ b/src/main/java/racingcar/Application.java @@ -2,6 +2,9 @@ public class Application { public static void main(String[] args) { - // TODO 구현 진행 + + String[] tmp = Input.ReadCarName(); + int n = Input.ReadTryNum(); + } } diff --git a/src/main/java/racingcar/Input.java b/src/main/java/racingcar/Input.java new file mode 100644 index 0000000000..4feed5924a --- /dev/null +++ b/src/main/java/racingcar/Input.java @@ -0,0 +1,63 @@ +package racingcar; +import camp.nextstep.edu.missionutils.Console; + +public class Input { + static String[] carNames = new String[100]; + static int carPos = 0; + + public static String[] ReadCarName(){ + System.out.println("경주할 자동차 이름을 입력하세요.(이름은 쉼표(,) 기준으로 구분)"); + while(true) + { + String input = Console.readLine(); + String[] tmp = input.split(","); + try{ + StringHandlingExecption(tmp); + } + catch(IllegalArgumentException e) { + System.out.println(e.getMessage() + " 5이하의 문자열을 입력하세요."); + continue; + } + break; + } + return carNames; + } + + public static void StringHandlingExecption(String[] tmp){ + + for(int i = 0; i < tmp.length; i++){ + if(tmp[i].length() > 5){ + throw new IllegalArgumentException("[Error]"); + } + carNames[carPos] = tmp[i]; + carPos++; + } + } + + public static int ReadTryNum(){ + System.out.println("시도할 회수는 몇회인가요?"); + while(true){ + String n; + int num; + try{ + n = Console.readLine(); + num = IntHandlingException(n); + } + catch(Exception e){ + System.out.println("[Error] 시도횟수는 숫자여야 한다."); + continue; + } + return num; + } + } + + public static int IntHandlingException(String n){ + int num; + try{ + num = Integer.parseInt(n); + }catch(Exception e){ + throw new IllegalArgumentException("[Error]"); + } + return num; + } +} From 3fdb8dfe8dd4c3dfb915b233ae94f2e69b90ffd2 Mon Sep 17 00:00:00 2001 From: LTSGOD <78635028+LTSGOD@users.noreply.github.com> Date: Sat, 14 Jan 2023 21:11:17 +0900 Subject: [PATCH 05/29] Delete README.md.txt --- docs/README.md.txt | 1 - 1 file changed, 1 deletion(-) delete mode 100644 docs/README.md.txt diff --git a/docs/README.md.txt b/docs/README.md.txt deleted file mode 100644 index 933dcafbb5..0000000000 --- a/docs/README.md.txt +++ /dev/null @@ -1 +0,0 @@ -sfadf \ No newline at end of file From 8c2a96e98dce60c61411d9c7a2bc5aba4898917c Mon Sep 17 00:00:00 2001 From: LTSGOD <78635028+LTSGOD@users.noreply.github.com> Date: Sat, 14 Jan 2023 21:18:01 +0900 Subject: [PATCH 06/29] Create README.md --- docs/README.md | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 docs/README.md diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 0000000000..2eaf24dba3 --- /dev/null +++ b/docs/README.md @@ -0,0 +1,11 @@ +InputClass 구현 +입력기능: ReadCarName, ReadTryNum +예외처리기능: StringHandlingException, IntHandlingException + - 자동차이름 이름 5자 초과로 들어올때 + - 횟수에 숫자가 안들어올때 + +Car 구현 +- 랜덤결과에 따라 전진, 머무르는 기능 + +PlayGame 구현 +-play누르면 게임이 진행되는 기능. From af5b0ff8092758bfa4b7f443741c50d5886b3430 Mon Sep 17 00:00:00 2001 From: LTSGOD Date: Sat, 14 Jan 2023 21:37:37 +0900 Subject: [PATCH 07/29] docs: modify plan feat: add Car class --- docs/README.md | 3 ++- src/main/java/racingcar/Car.java | 12 +++++++++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/docs/README.md b/docs/README.md index 2eaf24dba3..1c358ac142 100644 --- a/docs/README.md +++ b/docs/README.md @@ -5,7 +5,8 @@ InputClass 구현 - 횟수에 숫자가 안들어올때 Car 구현 -- 랜덤결과에 따라 전진, 머무르는 기능 +- 랜덤결과에 따라 전진, 머무르는 기능 MoveOrNot +- 시도횟수 n만큼 Race 진행 기능 PlayGame 구현 -play누르면 게임이 진행되는 기능. diff --git a/src/main/java/racingcar/Car.java b/src/main/java/racingcar/Car.java index ab3df94921..fecca6b5a7 100644 --- a/src/main/java/racingcar/Car.java +++ b/src/main/java/racingcar/Car.java @@ -1,4 +1,5 @@ package racingcar; +import camp.nextstep.edu.missionutils.Randoms; public class Car { private final String name; @@ -8,5 +9,14 @@ public Car(String name) { this.name = name; } - // 추가 기능 구현 + public void Race(int num){ + for(int i = 0; i < num; i++){ + position += MoveOrNot(); + } + } + + public int MoveOrNot(){ + if(Randoms.pickNumberInRange(0,9) >= 4) return 1; + return 0; + } } From 613ead94beddedb709a02b87e9482732c4df9990 Mon Sep 17 00:00:00 2001 From: LTSGOD Date: Sat, 14 Jan 2023 22:41:01 +0900 Subject: [PATCH 08/29] feat(Input): generate getCarNum --- src/main/java/racingcar/Input.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/main/java/racingcar/Input.java b/src/main/java/racingcar/Input.java index 4feed5924a..38bf7a6d7b 100644 --- a/src/main/java/racingcar/Input.java +++ b/src/main/java/racingcar/Input.java @@ -4,6 +4,7 @@ public class Input { static String[] carNames = new String[100]; static int carPos = 0; + static int carNum; public static String[] ReadCarName(){ System.out.println("경주할 자동차 이름을 입력하세요.(이름은 쉼표(,) 기준으로 구분)"); @@ -60,4 +61,12 @@ public static int IntHandlingException(String n){ } return num; } + + + public int getCarNum(){ + for(int i = 0; carNames[i] != null; i++){ + carNum++; + } + return carNum; + } } From 4d9bde8bb6f390b20b1c7dacec3fe16b19cf5800 Mon Sep 17 00:00:00 2001 From: LTSGOD Date: Sat, 14 Jan 2023 22:44:51 +0900 Subject: [PATCH 09/29] feat(Car): generate getPosition --- src/main/java/racingcar/Car.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/racingcar/Car.java b/src/main/java/racingcar/Car.java index fecca6b5a7..0415570264 100644 --- a/src/main/java/racingcar/Car.java +++ b/src/main/java/racingcar/Car.java @@ -19,4 +19,8 @@ public int MoveOrNot(){ if(Randoms.pickNumberInRange(0,9) >= 4) return 1; return 0; } + + public int getPosition(){ + return position; + } } From 804ae272890425ac176136b065435396bf318ba7 Mon Sep 17 00:00:00 2001 From: LTSGOD Date: Sat, 14 Jan 2023 22:46:20 +0900 Subject: [PATCH 10/29] feat(Game): generate setCars, Play() --- src/main/java/racingcar/Game.java | 33 +++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 src/main/java/racingcar/Game.java diff --git a/src/main/java/racingcar/Game.java b/src/main/java/racingcar/Game.java new file mode 100644 index 0000000000..1a10270f5c --- /dev/null +++ b/src/main/java/racingcar/Game.java @@ -0,0 +1,33 @@ +package racingcar; + +public class Game { + private Car[] cars = new Car[100]; + private int TryNum; + private int carNum; + + public Game(){ + String[] StringInput = Input.ReadCarName(); + TryNum = Input.ReadTryNum(); + + setCars(StringInput); + + Play(); + + for(int i = 0; i Date: Sat, 14 Jan 2023 22:49:29 +0900 Subject: [PATCH 11/29] Update README.md --- docs/README.md | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/docs/README.md b/docs/README.md index 1c358ac142..35347247a8 100644 --- a/docs/README.md +++ b/docs/README.md @@ -3,10 +3,13 @@ InputClass 구현 예외처리기능: StringHandlingException, IntHandlingException - 자동차이름 이름 5자 초과로 들어올때 - 횟수에 숫자가 안들어올때 +getCarNum기능: 입력된 자동차의 개수반환 Car 구현 - 랜덤결과에 따라 전진, 머무르는 기능 MoveOrNot -- 시도횟수 n만큼 Race 진행 기능 +- Race: Trynum 만큼 Race진행 +- getPosition: 현재 Position 반환 -PlayGame 구현 --play누르면 게임이 진행되는 기능. +Game 구현 +- 생성자구현: 차세팅, play 진행 +-play: 경주게임 시작 From bad6fcca10fa44348b7eccc91166fae9a7203555 Mon Sep 17 00:00:00 2001 From: LTSGOD Date: Sat, 14 Jan 2023 23:25:40 +0900 Subject: [PATCH 12/29] refactor(Input): change Data type - remove carPos, carNum - change dynamic array -> ArrayList --- src/main/java/racingcar/Input.java | 21 ++++++--------------- 1 file changed, 6 insertions(+), 15 deletions(-) diff --git a/src/main/java/racingcar/Input.java b/src/main/java/racingcar/Input.java index 38bf7a6d7b..2c569295b8 100644 --- a/src/main/java/racingcar/Input.java +++ b/src/main/java/racingcar/Input.java @@ -1,12 +1,12 @@ package racingcar; import camp.nextstep.edu.missionutils.Console; -public class Input { - static String[] carNames = new String[100]; - static int carPos = 0; - static int carNum; +import java.util.ArrayList; +import java.util.List; - public static String[] ReadCarName(){ +public class Input { + static ArrayList carNames = new ArrayList(); + public static ArrayList ReadCarName(){ System.out.println("경주할 자동차 이름을 입력하세요.(이름은 쉼표(,) 기준으로 구분)"); while(true) { @@ -30,8 +30,7 @@ public static void StringHandlingExecption(String[] tmp){ if(tmp[i].length() > 5){ throw new IllegalArgumentException("[Error]"); } - carNames[carPos] = tmp[i]; - carPos++; + carNames.add(tmp[i]); } } @@ -61,12 +60,4 @@ public static int IntHandlingException(String n){ } return num; } - - - public int getCarNum(){ - for(int i = 0; carNames[i] != null; i++){ - carNum++; - } - return carNum; - } } From 3800a8cee2de1b38333593f3607727a6d8ba951b Mon Sep 17 00:00:00 2001 From: LTSGOD Date: Sat, 14 Jan 2023 23:32:13 +0900 Subject: [PATCH 13/29] refactor(Game): change data type - cars array -> List array, comfortable to input - change other method implementation --- src/main/java/racingcar/Game.java | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/src/main/java/racingcar/Game.java b/src/main/java/racingcar/Game.java index 1a10270f5c..b8f8cd9b9d 100644 --- a/src/main/java/racingcar/Game.java +++ b/src/main/java/racingcar/Game.java @@ -1,33 +1,35 @@ package racingcar; +import java.util.ArrayList; +import java.util.List; + public class Game { - private Car[] cars = new Car[100]; + private ArrayList cars = new ArrayList(); private int TryNum; private int carNum; public Game(){ - String[] StringInput = Input.ReadCarName(); + ArrayList StringInput = Input.ReadCarName(); TryNum = Input.ReadTryNum(); - setCars(StringInput); - Play(); + } - for(int i = 0; i input){ + for(int i = 0; i Date: Sat, 14 Jan 2023 23:34:00 +0900 Subject: [PATCH 14/29] feat(Car): generate reset code in getPosition - after a round, set position 0 --- src/main/java/racingcar/Car.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/racingcar/Car.java b/src/main/java/racingcar/Car.java index 0415570264..60f319cce5 100644 --- a/src/main/java/racingcar/Car.java +++ b/src/main/java/racingcar/Car.java @@ -21,6 +21,8 @@ public int MoveOrNot(){ } public int getPosition(){ - return position; + int result = position; + position = 0; + return result; } } From 56e3bc731b3cdc9a8afba6ff9986ae08a0d6b58d Mon Sep 17 00:00:00 2001 From: LTSGOD Date: Sun, 15 Jan 2023 11:14:09 +0900 Subject: [PATCH 15/29] refactor(Car): remove position 0 Code - add carBase property not to use setPostiion - delete 0 code in getPostion Because of Sort --- src/main/java/racingcar/Car.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/main/java/racingcar/Car.java b/src/main/java/racingcar/Car.java index 60f319cce5..7e33224f28 100644 --- a/src/main/java/racingcar/Car.java +++ b/src/main/java/racingcar/Car.java @@ -4,12 +4,14 @@ public class Car { private final String name; private int position = 0; + private int positionBase = 0; public Car(String name) { this.name = name; } public void Race(int num){ + positionBase = position;//변하기전 위치 기억 for(int i = 0; i < num; i++){ position += MoveOrNot(); } @@ -21,8 +23,10 @@ public int MoveOrNot(){ } public int getPosition(){ - int result = position; - position = 0; - return result; + return position - positionBase; + } + + public String getName(){ + return name; } } From 39d4dc2e963a3b6eb1690f0fe19bf21ea89a0d02 Mon Sep 17 00:00:00 2001 From: LTSGOD Date: Sun, 15 Jan 2023 11:18:49 +0900 Subject: [PATCH 16/29] feat(Game): add Scoreboard - delete import List - add SortCar method - add HashMap Scoreboard, setScoreboard method, Score method --- src/main/java/racingcar/Game.java | 43 ++++++++++++++++++++++++++++++- 1 file changed, 42 insertions(+), 1 deletion(-) diff --git a/src/main/java/racingcar/Game.java b/src/main/java/racingcar/Game.java index b8f8cd9b9d..bb8a82164f 100644 --- a/src/main/java/racingcar/Game.java +++ b/src/main/java/racingcar/Game.java @@ -1,24 +1,58 @@ package racingcar; import java.util.ArrayList; -import java.util.List; +import java.util.Collections; +import java.util.HashMap; public class Game { private ArrayList cars = new ArrayList(); private int TryNum; + private HashMap scoreBoard; private int carNum; public Game(){ ArrayList StringInput = Input.ReadCarName(); TryNum = Input.ReadTryNum(); setCars(StringInput); + carNum = cars.size(); + setScoreBoad(); + +// for(String i : scoreBoard.keySet()){ +// System.out.println("key: " + i + " value: " + scoreBoard.get(i)); +// } scoreboard 출력 테스트 + Play(); } public void Play(){ for(int i = 0; i c2.getPosition() - c1.getPosition()); + } + + public void Score(){ + int max = cars.get(0).getPosition(); + updateValue(cars.get(0).getName(),cars.get(0).getPosition()); + for(int i = 1; i input){ cars.add(new Car(input.get(i))); } } + + public void setScoreBoad(){ + scoreBoard = new HashMap(); + for(int i = 0; i < carNum; i++){ + scoreBoard.put(cars.get(i).getName(), 0); + } + } } From 179c3355544278daba878a641a1c64600b383ca1 Mon Sep 17 00:00:00 2001 From: LTSGOD Date: Sun, 15 Jan 2023 12:20:15 +0900 Subject: [PATCH 17/29] refact(Game): delete ScoreBoard - Because of using sorted method remove all ScoreBoard method - add sorted method to maintain order of cars - add SortedCars property --- src/main/java/racingcar/Game.java | 52 +++++++++++------------------ src/main/java/racingcar/Output.java | 2 ++ 2 files changed, 22 insertions(+), 32 deletions(-) create mode 100644 src/main/java/racingcar/Output.java diff --git a/src/main/java/racingcar/Game.java b/src/main/java/racingcar/Game.java index bb8a82164f..6486b22f41 100644 --- a/src/main/java/racingcar/Game.java +++ b/src/main/java/racingcar/Game.java @@ -1,13 +1,12 @@ package racingcar; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; +import java.util.*; +import java.util.stream.Collectors; public class Game { private ArrayList cars = new ArrayList(); + private List SortedCars; private int TryNum; - private HashMap scoreBoard; private int carNum; public Game(){ @@ -15,50 +14,46 @@ public Game(){ TryNum = Input.ReadTryNum(); setCars(StringInput); carNum = cars.size(); - setScoreBoad(); - -// for(String i : scoreBoard.keySet()){ -// System.out.println("key: " + i + " value: " + scoreBoard.get(i)); -// } scoreboard 출력 테스트 + System.out.println("실행 결과"); Play(); + for(Car c1: cars){ + System.out.println("name: " + c1.getName() + " win : " + c1.getWinNum()); + } } public void Play(){ for(int i = 0; i c2.getPosition() - c1.getPosition()); + SortedCars = cars.stream().sorted(Comparator.comparing(Car::getPosition).reversed()).collect(Collectors.toList()); } public void Score(){ - int max = cars.get(0).getPosition(); - updateValue(cars.get(0).getName(),cars.get(0).getPosition()); - for(int i = 1; i input){ @@ -66,11 +61,4 @@ public void setCars(ArrayList input){ cars.add(new Car(input.get(i))); } } - - public void setScoreBoad(){ - scoreBoard = new HashMap(); - for(int i = 0; i < carNum; i++){ - scoreBoard.put(cars.get(i).getName(), 0); - } - } } diff --git a/src/main/java/racingcar/Output.java b/src/main/java/racingcar/Output.java new file mode 100644 index 0000000000..3c29389f24 --- /dev/null +++ b/src/main/java/racingcar/Output.java @@ -0,0 +1,2 @@ +package racingcar;public class Output { +} From 98d53732b78a2be08f8445c7dc24c6f621c23c35 Mon Sep 17 00:00:00 2001 From: LTSGOD Date: Sun, 15 Jan 2023 12:23:37 +0900 Subject: [PATCH 18/29] feat(Car): add winNum property - to record number of win, add winNumProperty - add getter, setter of winNum --- src/main/java/racingcar/Car.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/main/java/racingcar/Car.java b/src/main/java/racingcar/Car.java index 7e33224f28..1e3a2288d9 100644 --- a/src/main/java/racingcar/Car.java +++ b/src/main/java/racingcar/Car.java @@ -5,6 +5,7 @@ public class Car { private final String name; private int position = 0; private int positionBase = 0; + private int winNum = 0; public Car(String name) { this.name = name; @@ -29,4 +30,12 @@ public int getPosition(){ public String getName(){ return name; } + + public void increaseWinNum(){ + winNum++; + } + + public int getWinNum(){ + return winNum; + } } From 5c3b857ad627b1ca30a6b83412a695d8fc5f528e Mon Sep 17 00:00:00 2001 From: LTSGOD Date: Sun, 15 Jan 2023 12:25:41 +0900 Subject: [PATCH 19/29] feat(Output): add printRound method --- src/main/java/racingcar/Output.java | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/main/java/racingcar/Output.java b/src/main/java/racingcar/Output.java index 3c29389f24..fbcabab84a 100644 --- a/src/main/java/racingcar/Output.java +++ b/src/main/java/racingcar/Output.java @@ -1,2 +1,14 @@ -package racingcar;public class Output { +package racingcar; + +public class Output { + public static void printRound(Car c1){ + System.out.print(c1.getName() +": "); + printBar(c1); + } + public static void printBar(Car c1){ + for(int i = 0; i Date: Sun, 15 Jan 2023 14:33:08 +0900 Subject: [PATCH 20/29] style(Car): add // - add // explain position Base --- src/main/java/racingcar/Car.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/racingcar/Car.java b/src/main/java/racingcar/Car.java index 1e3a2288d9..1bfb78afe9 100644 --- a/src/main/java/racingcar/Car.java +++ b/src/main/java/racingcar/Car.java @@ -24,7 +24,7 @@ public int MoveOrNot(){ } public int getPosition(){ - return position - positionBase; + return position - positionBase;//전체 위치가 아닌 한라운드당 위차 계산 } public String getName(){ From f35af3fac13d5eb62c87eccf7dc4c9842635bb0f Mon Sep 17 00:00:00 2001 From: LTSGOD Date: Sun, 15 Jan 2023 14:34:32 +0900 Subject: [PATCH 21/29] style(Output): modify output form --- src/main/java/racingcar/Output.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/racingcar/Output.java b/src/main/java/racingcar/Output.java index fbcabab84a..ff334aca65 100644 --- a/src/main/java/racingcar/Output.java +++ b/src/main/java/racingcar/Output.java @@ -2,7 +2,7 @@ public class Output { public static void printRound(Car c1){ - System.out.print(c1.getName() +": "); + System.out.print(c1.getName() +" : "); printBar(c1); } public static void printBar(Car c1){ From 5683adc327ec119558379e8c43d6d3c14f504a26 Mon Sep 17 00:00:00 2001 From: LTSGOD Date: Sun, 15 Jan 2023 14:35:28 +0900 Subject: [PATCH 22/29] style(Input): modify "Error" to "ERROR" --- src/main/java/racingcar/Input.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/racingcar/Input.java b/src/main/java/racingcar/Input.java index 2c569295b8..5fbc6c2c04 100644 --- a/src/main/java/racingcar/Input.java +++ b/src/main/java/racingcar/Input.java @@ -28,7 +28,7 @@ public static void StringHandlingExecption(String[] tmp){ for(int i = 0; i < tmp.length; i++){ if(tmp[i].length() > 5){ - throw new IllegalArgumentException("[Error]"); + throw new IllegalArgumentException("[ERROR]"); } carNames.add(tmp[i]); } From d40b8e43c0d7a44145f67b389badaae5718f5015 Mon Sep 17 00:00:00 2001 From: LTSGOD Date: Sun, 15 Jan 2023 14:36:49 +0900 Subject: [PATCH 23/29] feat(Game): add selecting winner method "final()" - after TryNum Round, it calculate who is the whinner --- src/main/java/racingcar/Game.java | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/src/main/java/racingcar/Game.java b/src/main/java/racingcar/Game.java index 6486b22f41..21eaed5559 100644 --- a/src/main/java/racingcar/Game.java +++ b/src/main/java/racingcar/Game.java @@ -17,9 +17,7 @@ public Game(){ System.out.println("실행 결과"); Play(); - for(Car c1: cars){ - System.out.println("name: " + c1.getName() + " win : " + c1.getWinNum()); - } + finalWin(); } public void Play(){ @@ -61,4 +59,19 @@ public void setCars(ArrayList input){ cars.add(new Car(input.get(i))); } } + + public void finalWin(){ + Collections.sort(cars, (c1, c2) -> c2.getWinNum() - c1.getWinNum()); + Car maxCar = cars.get(0); + int max = maxCar.getWinNum(); + System.out.print("최종 우승자 : " + maxCar.getName()); + for(int i = 1; i Date: Sun, 15 Jan 2023 14:38:31 +0900 Subject: [PATCH 24/29] chore(Application): modify Game Start --- src/main/java/racingcar/Application.java | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/main/java/racingcar/Application.java b/src/main/java/racingcar/Application.java index 0f18914d32..6070de4ef2 100644 --- a/src/main/java/racingcar/Application.java +++ b/src/main/java/racingcar/Application.java @@ -2,9 +2,6 @@ public class Application { public static void main(String[] args) { - - String[] tmp = Input.ReadCarName(); - int n = Input.ReadTryNum(); - + Game r1 = new Game(); } } From ac2ffb7da53cc574af983a45b3f4d6200855a4a4 Mon Sep 17 00:00:00 2001 From: LTSGOD Date: Sun, 15 Jan 2023 14:39:29 +0900 Subject: [PATCH 25/29] docs(README.md) modify docs --- docs/README.md | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/docs/README.md b/docs/README.md index 35347247a8..0d1336cc80 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,15 +1,26 @@ InputClass 구현 입력기능: ReadCarName, ReadTryNum 예외처리기능: StringHandlingException, IntHandlingException - - 자동차이름 이름 5자 초과로 들어올때 - - 횟수에 숫자가 안들어올때 -getCarNum기능: 입력된 자동차의 개수반환 + +- 자동차이름 이름 5자 초과로 들어올때 +- 횟수에 숫자가 안들어올때 + getCarNum기능: 입력된 자동차의 개수반환 Car 구현 + - 랜덤결과에 따라 전진, 머무르는 기능 MoveOrNot -- Race: Trynum 만큼 Race진행 -- getPosition: 현재 Position 반환 +- Race: Trynum 만큼 Race진행 +- getPosition: 현재 Position +- winNum: 이긴횟수 기록 Game 구현 + - 생성자구현: 차세팅, play 진행 --play: 경주게임 시작 + -play: 횟수 만큼 경주게임 시작 + -round: 한 라운드 게임진행 + -setCars: Input으로 받아온 이름으로 Car객체배열생성 + -sortCars: 매라운드 postion순으로 정렬 + +output 구현 + +- printRound: 라운드마다 게임결과 출력 From 79398f950077d87ddadeacaafcc6384a1733c014 Mon Sep 17 00:00:00 2001 From: LTSGOD Date: Sun, 15 Jan 2023 15:08:49 +0900 Subject: [PATCH 26/29] style(.java): modify java Convention --- src/main/java/racingcar/Application.java | 6 +- src/main/java/racingcar/Car.java | 74 +++++------ src/main/java/racingcar/Game.java | 124 ++++++++++--------- src/main/java/racingcar/Input.java | 109 ++++++++-------- src/main/java/racingcar/Output.java | 21 ++-- src/test/java/racingcar/ApplicationTest.java | 61 ++++----- 6 files changed, 200 insertions(+), 195 deletions(-) diff --git a/src/main/java/racingcar/Application.java b/src/main/java/racingcar/Application.java index 6070de4ef2..5172ebcbbf 100644 --- a/src/main/java/racingcar/Application.java +++ b/src/main/java/racingcar/Application.java @@ -1,7 +1,7 @@ package racingcar; public class Application { - public static void main(String[] args) { - Game r1 = new Game(); - } + public static void main(String[] args) { + Game r1 = new Game(); + } } diff --git a/src/main/java/racingcar/Car.java b/src/main/java/racingcar/Car.java index 1bfb78afe9..7d10e7b322 100644 --- a/src/main/java/racingcar/Car.java +++ b/src/main/java/racingcar/Car.java @@ -1,41 +1,43 @@ package racingcar; + import camp.nextstep.edu.missionutils.Randoms; public class Car { - private final String name; - private int position = 0; - private int positionBase = 0; - private int winNum = 0; - - public Car(String name) { - this.name = name; - } - - public void Race(int num){ - positionBase = position;//변하기전 위치 기억 - for(int i = 0; i < num; i++){ - position += MoveOrNot(); - } - } - - public int MoveOrNot(){ - if(Randoms.pickNumberInRange(0,9) >= 4) return 1; - return 0; - } - - public int getPosition(){ - return position - positionBase;//전체 위치가 아닌 한라운드당 위차 계산 - } - - public String getName(){ - return name; - } - - public void increaseWinNum(){ - winNum++; - } - - public int getWinNum(){ - return winNum; - } + private final String name; + private int position = 0; + private int positionBase = 0; + private int winNum = 0; + + public Car(String name) { + this.name = name; + } + + public void Race(int num) { + positionBase = position;//변하기전 위치 기억 + for (int i = 0; i < num; i++) { + position += MoveOrNot(); + } + } + + public int MoveOrNot() { + if (Randoms.pickNumberInRange(0, 9) >= 4) + return 1; + return 0; + } + + public int getPosition() { + return position - positionBase;//전체 위치가 아닌 한라운드당 위차 계산 + } + + public String getName() { + return name; + } + + public void increaseWinNum() { + winNum++; + } + + public int getWinNum() { + return winNum; + } } diff --git a/src/main/java/racingcar/Game.java b/src/main/java/racingcar/Game.java index 21eaed5559..25ddbc2767 100644 --- a/src/main/java/racingcar/Game.java +++ b/src/main/java/racingcar/Game.java @@ -4,74 +4,76 @@ import java.util.stream.Collectors; public class Game { - private ArrayList cars = new ArrayList(); - private List SortedCars; - private int TryNum; - private int carNum; + private ArrayList cars = new ArrayList(); + private List SortedCars; + private int TryNum; + private int carNum; - public Game(){ - ArrayList StringInput = Input.ReadCarName(); - TryNum = Input.ReadTryNum(); - setCars(StringInput); - carNum = cars.size(); + public Game() { + ArrayList StringInput = Input.ReadCarName(); + TryNum = Input.ReadTryNum(); + setCars(StringInput); + carNum = cars.size(); - System.out.println("실행 결과"); - Play(); - finalWin(); - } + System.out.println("실행 결과"); + Play(); + finalWin(); + } - public void Play(){ - for(int i = 0; i input){ - for(int i = 0; i input) { + for (int i = 0; i < input.size(); i++) { + cars.add(new Car(input.get(i))); + } + } - public void finalWin(){ - Collections.sort(cars, (c1, c2) -> c2.getWinNum() - c1.getWinNum()); - Car maxCar = cars.get(0); - int max = maxCar.getWinNum(); - System.out.print("최종 우승자 : " + maxCar.getName()); - for(int i = 1; i c2.getWinNum() - c1.getWinNum()); + Car maxCar = cars.get(0); + int max = maxCar.getWinNum(); + System.out.print("최종 우승자 : " + maxCar.getName()); + for (int i = 1; i < carNum; i++) { + Car c1 = cars.get(i); + if (c1.getWinNum() != max) { + break; + } + System.out.print(", " + c1.getName()); + } + System.out.println(); + } } diff --git a/src/main/java/racingcar/Input.java b/src/main/java/racingcar/Input.java index 5fbc6c2c04..f6492db0c1 100644 --- a/src/main/java/racingcar/Input.java +++ b/src/main/java/racingcar/Input.java @@ -1,63 +1,62 @@ package racingcar; + import camp.nextstep.edu.missionutils.Console; import java.util.ArrayList; import java.util.List; public class Input { - static ArrayList carNames = new ArrayList(); - public static ArrayList ReadCarName(){ - System.out.println("경주할 자동차 이름을 입력하세요.(이름은 쉼표(,) 기준으로 구분)"); - while(true) - { - String input = Console.readLine(); - String[] tmp = input.split(","); - try{ - StringHandlingExecption(tmp); - } - catch(IllegalArgumentException e) { - System.out.println(e.getMessage() + " 5이하의 문자열을 입력하세요."); - continue; - } - break; - } - return carNames; - } - - public static void StringHandlingExecption(String[] tmp){ - - for(int i = 0; i < tmp.length; i++){ - if(tmp[i].length() > 5){ - throw new IllegalArgumentException("[ERROR]"); - } - carNames.add(tmp[i]); - } - } - - public static int ReadTryNum(){ - System.out.println("시도할 회수는 몇회인가요?"); - while(true){ - String n; - int num; - try{ - n = Console.readLine(); - num = IntHandlingException(n); - } - catch(Exception e){ - System.out.println("[Error] 시도횟수는 숫자여야 한다."); - continue; - } - return num; - } - } - - public static int IntHandlingException(String n){ - int num; - try{ - num = Integer.parseInt(n); - }catch(Exception e){ - throw new IllegalArgumentException("[Error]"); - } - return num; - } + static ArrayList carNames = new ArrayList(); + + public static ArrayList ReadCarName() { + System.out.println("경주할 자동차 이름을 입력하세요.(이름은 쉼표(,) 기준으로 구분)"); + while (true) { + String input = Console.readLine(); + String[] tmp = input.split(","); + try { + StringHandlingExecption(tmp); + } catch (IllegalArgumentException e) { + System.out.println(e.getMessage() + " 5이하의 문자열을 입력하세요."); + continue; + } + break; + } + return carNames; + } + + public static void StringHandlingExecption(String[] tmp) { + + for (int i = 0; i < tmp.length; i++) { + if (tmp[i].length() > 5) { + throw new IllegalArgumentException("[ERROR]"); + } + carNames.add(tmp[i]); + } + } + + public static int ReadTryNum() { + System.out.println("시도할 회수는 몇회인가요?"); + while (true) { + String n; + int num; + try { + n = Console.readLine(); + num = IntHandlingException(n); + } catch (Exception e) { + System.out.println("[Error] 시도횟수는 숫자여야 한다."); + continue; + } + return num; + } + } + + public static int IntHandlingException(String n) { + int num; + try { + num = Integer.parseInt(n); + } catch (Exception e) { + throw new IllegalArgumentException("[Error]"); + } + return num; + } } diff --git a/src/main/java/racingcar/Output.java b/src/main/java/racingcar/Output.java index ff334aca65..31494a82ca 100644 --- a/src/main/java/racingcar/Output.java +++ b/src/main/java/racingcar/Output.java @@ -1,14 +1,15 @@ package racingcar; public class Output { - public static void printRound(Car c1){ - System.out.print(c1.getName() +" : "); - printBar(c1); - } - public static void printBar(Car c1){ - for(int i = 0; i { - run("pobi,woni", "1"); - assertThat(output()).contains("pobi : -", "woni : ", "최종 우승자 : pobi"); - }, - MOVING_FORWARD, STOP - ); - } - - @Test - void 이름에_대한_예외_처리() { - assertSimpleTest( - () -> { - runException("pobi,javaji"); - assertThat(output()).contains(ERROR_MESSAGE); - } - ); - } - - @Override - public void runMain() { - Application.main(new String[]{}); - } + private static final int MOVING_FORWARD = 4; + private static final int STOP = 3; + + private static final String ERROR_MESSAGE = "[ERROR]"; + + @Test + void 전진_정지() { + assertRandomNumberInRangeTest( + () -> { + run("pobi,woni", "1"); + assertThat(output()).contains("pobi : -", "woni : ", "최종 우승자 : pobi"); + }, + MOVING_FORWARD, STOP + ); + } + + @Test + void 이름에_대한_예외_처리() { + assertSimpleTest( + () -> { + runException("pobi,javaji"); + assertThat(output()).contains(ERROR_MESSAGE); + } + ); + } + + @Override + public void runMain() { + Application.main(new String[] {}); + } } From 76849e19d5976434be53ce3d159f885893754b0a Mon Sep 17 00:00:00 2001 From: LTSGOD Date: Mon, 16 Jan 2023 19:54:45 +0900 Subject: [PATCH 27/29] simplify(Input) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 몇몇 메소드들 public -> private 전환 - 콘솔 입력 받는 부분 코드 단순화 --- src/main/java/racingcar/Input.java | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/src/main/java/racingcar/Input.java b/src/main/java/racingcar/Input.java index f6492db0c1..cd4db2973c 100644 --- a/src/main/java/racingcar/Input.java +++ b/src/main/java/racingcar/Input.java @@ -11,10 +11,9 @@ public class Input { public static ArrayList ReadCarName() { System.out.println("경주할 자동차 이름을 입력하세요.(이름은 쉼표(,) 기준으로 구분)"); while (true) { - String input = Console.readLine(); - String[] tmp = input.split(","); + String[] input = Console.readLine().split(","); try { - StringHandlingExecption(tmp); + StringHandlingExecption(input); } catch (IllegalArgumentException e) { System.out.println(e.getMessage() + " 5이하의 문자열을 입력하세요."); continue; @@ -24,24 +23,22 @@ public static ArrayList ReadCarName() { return carNames; } - public static void StringHandlingExecption(String[] tmp) { + private static void StringHandlingExecption(String[] input) { - for (int i = 0; i < tmp.length; i++) { - if (tmp[i].length() > 5) { + for (String s : input) { + if (s.length() > 5) { throw new IllegalArgumentException("[ERROR]"); } - carNames.add(tmp[i]); + carNames.add(s); } } public static int ReadTryNum() { System.out.println("시도할 회수는 몇회인가요?"); while (true) { - String n; int num; try { - n = Console.readLine(); - num = IntHandlingException(n); + num = IntHandlingException(Console.readLine()); } catch (Exception e) { System.out.println("[Error] 시도횟수는 숫자여야 한다."); continue; @@ -50,7 +47,7 @@ public static int ReadTryNum() { } } - public static int IntHandlingException(String n) { + private static int IntHandlingException(String n) { int num; try { num = Integer.parseInt(n); From 604278baa704e39c03da23f92a420eec0bec2b63 Mon Sep 17 00:00:00 2001 From: LTSGOD Date: Mon, 16 Jan 2023 19:57:15 +0900 Subject: [PATCH 28/29] Refactor(Game) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - handlingRoundCoWinner, handlingFinalCoWinner 메서드로 분리 - 일부 public 접근 함수 private으로 접근권한 변환 --- src/main/java/racingcar/Game.java | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/src/main/java/racingcar/Game.java b/src/main/java/racingcar/Game.java index 25ddbc2767..5024b436d3 100644 --- a/src/main/java/racingcar/Game.java +++ b/src/main/java/racingcar/Game.java @@ -20,7 +20,7 @@ public Game() { finalWin(); } - public void Play() { + private void Play() { for (int i = 0; i < TryNum; i++) { Round(); SortCars(); @@ -28,17 +28,21 @@ public void Play() { } } - public void SortCars() { + private void SortCars() { SortedCars = cars.stream() .sorted(Comparator.comparing(Car::getPosition).reversed()) .collect(Collectors.toList()); } - public void Score() { + private void Score() { Car maxCar = SortedCars.get(0); maxCar.increaseWinNum(); int max = maxCar.getPosition(); + handleRoundCoWinner(max); + } + + private void handleRoundCoWinner(int max) { for (int i = 1; i < carNum; i++) { Car c1 = SortedCars.get(i); if (c1.getPosition() != max) { @@ -48,7 +52,7 @@ public void Score() { } } - public void Round() { + private void Round() { for (Car c1 : cars) { c1.Race(TryNum); Output.printRound(c1); @@ -56,17 +60,22 @@ public void Round() { System.out.println(); } - public void setCars(ArrayList input) { + private void setCars(ArrayList input) { for (int i = 0; i < input.size(); i++) { cars.add(new Car(input.get(i))); } } - public void finalWin() { + private void finalWin() { Collections.sort(cars, (c1, c2) -> c2.getWinNum() - c1.getWinNum()); Car maxCar = cars.get(0); int max = maxCar.getWinNum(); System.out.print("최종 우승자 : " + maxCar.getName()); + handleFinalCoWinner(max); + System.out.println(); + } + + private void handleFinalCoWinner(int max) { for (int i = 1; i < carNum; i++) { Car c1 = cars.get(i); if (c1.getWinNum() != max) { @@ -74,6 +83,5 @@ public void finalWin() { } System.out.print(", " + c1.getName()); } - System.out.println(); } } From 1e45c81e948096fb06b03388c8c0c78f334fbf0e Mon Sep 17 00:00:00 2001 From: LTSGOD Date: Mon, 16 Jan 2023 20:01:19 +0900 Subject: [PATCH 29/29] simplify(Game) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 멤버변수에 final 키워드 추가 - for 문 단순화 --- src/main/java/racingcar/Game.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/racingcar/Game.java b/src/main/java/racingcar/Game.java index 5024b436d3..08d9cc5797 100644 --- a/src/main/java/racingcar/Game.java +++ b/src/main/java/racingcar/Game.java @@ -4,10 +4,10 @@ import java.util.stream.Collectors; public class Game { - private ArrayList cars = new ArrayList(); + private final ArrayList cars = new ArrayList<>(); private List SortedCars; - private int TryNum; - private int carNum; + private final int TryNum; + private final int carNum; public Game() { ArrayList StringInput = Input.ReadCarName(); @@ -61,8 +61,8 @@ private void Round() { } private void setCars(ArrayList input) { - for (int i = 0; i < input.size(); i++) { - cars.add(new Car(input.get(i))); + for (String s : input) { + cars.add(new Car(s)); } }