From 9cdcebd362616c79351d5dcc865caa4368bbce4c Mon Sep 17 00:00:00 2001 From: Yuseunggeun Date: Mon, 13 Mar 2023 14:24:00 +0900 Subject: [PATCH 01/16] =?UTF-8?q?docs:=20=EA=B8=B0=EB=8A=A5=20=EB=AA=A9?= =?UTF-8?q?=EB=A1=9D=20=EB=AC=B8=EC=84=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FeatureList.md | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 FeatureList.md diff --git a/FeatureList.md b/FeatureList.md new file mode 100644 index 0000000..507374a --- /dev/null +++ b/FeatureList.md @@ -0,0 +1,19 @@ +# 기능 리스트 + +### 1.이름을 입력 받아 해당 이름의 Car 객체들을 생성한다. +- console API를 활용한다. +- 잘못된 값을 입력 시 에러메시지를 출력시키고 다시 입력받는다. +- Car 객체들을 리스트로 관리한다. + +### 2.시도할 회수를 입력받고 게임을 시작한다. + +### 3.자동차마다 0~9 사이 무작위 값을 생성한다. +- Randoms API를 활용한다. + +### 4.생성한 값이 4이상이면 전진한다. +- Car 객체의 position 값을 증가시킨다. + +### 5.매 이동마다 자동차들의 이동 상황을 출력한다. + +### 6.게임이 끝난 후 우승자를 출력한다. +- 우승자가 여러 명일 경우 쉼표를 사용해 구분한다. From 366dabddc0bc7044943bfc6011c6db3bde74b3ed Mon Sep 17 00:00:00 2001 From: Yuseunggeun Date: Wed, 15 Mar 2023 00:21:09 +0900 Subject: [PATCH 02/16] feat: input car names --- FeatureList.md | 2 +- src/main/java/racingcar/Application.java | 52 +++++++++++++++++++++++- src/main/java/racingcar/Car.java | 4 ++ 3 files changed, 56 insertions(+), 2 deletions(-) diff --git a/FeatureList.md b/FeatureList.md index 507374a..c182b0f 100644 --- a/FeatureList.md +++ b/FeatureList.md @@ -1,6 +1,6 @@ # 기능 리스트 -### 1.이름을 입력 받아 해당 이름의 Car 객체들을 생성한다. +### (구현)1.이름을 입력 받아 해당 이름의 Car 객체들을 생성한다. - console API를 활용한다. - 잘못된 값을 입력 시 에러메시지를 출력시키고 다시 입력받는다. - Car 객체들을 리스트로 관리한다. diff --git a/src/main/java/racingcar/Application.java b/src/main/java/racingcar/Application.java index b9ed045..b07c890 100644 --- a/src/main/java/racingcar/Application.java +++ b/src/main/java/racingcar/Application.java @@ -1,7 +1,57 @@ package racingcar; +import static camp.nextstep.edu.missionutils.Randoms.pickNumberInRange; +import static camp.nextstep.edu.missionutils.Console.readLine; + public class Application { public static void main(String[] args) { - // TODO 구현 진행 + Game game = new Game(); + game.initiateGame(); } } + +class Game{ + private int currentMove; + private int maxMove; + private Car[] cars; + Game(){ + + } + /* + public void printCars(){ + for(Car car : cars){ + System.out.println(car.getName()); + } + }*/ + public void initiateGame(){ + + String[] carNames = inputCarNames(); + cars = new Car[carNames.length]; + for(int index = 0; index < carNames.length; index++){ + cars[index] = new Car(carNames[index]); + } + //printCars(); + } + public static String[] inputCarNames(){ + + System.out.println("경주할 자동차 이름을 입력하세요.(이름은 쉼표(,) 기준으로 구분)"); + String userInput = readLine(); + String[] cars = userInput.split(","); + try{ + checkValidNames(cars); + } + catch(IllegalArgumentException e){ + System.out.println(e.getMessage()); + return inputCarNames(); + } + return cars; + } + public static void checkValidNames(String[] cars) { + + for (String car : cars) { + if (car.length() > 5) { + throw new IllegalArgumentException("[ERROR] 이름은 5자 이하여야 합니다."); + } + } + } +} \ No newline at end of file diff --git a/src/main/java/racingcar/Car.java b/src/main/java/racingcar/Car.java index ab3df94..77f0aff 100644 --- a/src/main/java/racingcar/Car.java +++ b/src/main/java/racingcar/Car.java @@ -8,5 +8,9 @@ public Car(String name) { this.name = name; } + public String getName(){ + return this.name; + } + // 추가 기능 구현 } From 8ee88a9178c7a86cfb5f294e06956f184aca75ae Mon Sep 17 00:00:00 2001 From: Yuseunggeun Date: Wed, 15 Mar 2023 13:30:48 +0900 Subject: [PATCH 03/16] refactor: modify initiateGame method --- src/main/java/racingcar/Application.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/main/java/racingcar/Application.java b/src/main/java/racingcar/Application.java index b07c890..d3fa516 100644 --- a/src/main/java/racingcar/Application.java +++ b/src/main/java/racingcar/Application.java @@ -25,13 +25,18 @@ public void printCars(){ }*/ public void initiateGame(){ - String[] carNames = inputCarNames(); + makeCars(inputCarNames()); + //printCars(); + } + + public void makeCars(String[] carNames){ + cars = new Car[carNames.length]; for(int index = 0; index < carNames.length; index++){ cars[index] = new Car(carNames[index]); } - //printCars(); } + public static String[] inputCarNames(){ System.out.println("경주할 자동차 이름을 입력하세요.(이름은 쉼표(,) 기준으로 구분)"); From 7b48790d0ed4f73895e3ab2ba3ae902757125641 Mon Sep 17 00:00:00 2001 From: Yuseunggeun Date: Wed, 15 Mar 2023 13:54:04 +0900 Subject: [PATCH 04/16] feat: input move count --- FeatureList.md | 3 +- src/main/java/racingcar/Application.java | 38 ++++++++++++++++++++++-- 2 files changed, 37 insertions(+), 4 deletions(-) diff --git a/FeatureList.md b/FeatureList.md index c182b0f..31692a5 100644 --- a/FeatureList.md +++ b/FeatureList.md @@ -5,7 +5,8 @@ - 잘못된 값을 입력 시 에러메시지를 출력시키고 다시 입력받는다. - Car 객체들을 리스트로 관리한다. -### 2.시도할 회수를 입력받고 게임을 시작한다. +### (구현)2.시도할 회수를 입력받고 게임을 시작한다. +- 잘못된 값을 입력 시 에러메시지를 출력시키고 다시 입력받는다. ### 3.자동차마다 0~9 사이 무작위 값을 생성한다. - Randoms API를 활용한다. diff --git a/src/main/java/racingcar/Application.java b/src/main/java/racingcar/Application.java index d3fa516..6edc0b3 100644 --- a/src/main/java/racingcar/Application.java +++ b/src/main/java/racingcar/Application.java @@ -11,7 +11,7 @@ public static void main(String[] args) { } class Game{ - private int currentMove; + private int currentMove = 0; private int maxMove; private Car[] cars; Game(){ @@ -26,7 +26,9 @@ public void printCars(){ public void initiateGame(){ makeCars(inputCarNames()); + maxMove = inputMaxMoves(); //printCars(); + System.out.println(maxMove); } public void makeCars(String[] carNames){ @@ -37,7 +39,7 @@ public void makeCars(String[] carNames){ } } - public static String[] inputCarNames(){ + public String[] inputCarNames(){ System.out.println("경주할 자동차 이름을 입력하세요.(이름은 쉼표(,) 기준으로 구분)"); String userInput = readLine(); @@ -51,7 +53,7 @@ public static String[] inputCarNames(){ } return cars; } - public static void checkValidNames(String[] cars) { + public void checkValidNames(String[] cars) { for (String car : cars) { if (car.length() > 5) { @@ -59,4 +61,34 @@ public static void checkValidNames(String[] cars) { } } } + + public int inputMaxMoves(){ + + System.out.println("시도할 회수는 몇회인가요?"); + String userInput = readLine(); + int inputMoves; + try{ + inputMoves = checkValidMoves(userInput); + } + catch(IllegalArgumentException e){ + System.out.println(e.getMessage()); + return inputMaxMoves(); + } + return inputMoves; + } + + public int checkValidMoves(String userInput) { + + int inputMoves; + try{ + inputMoves = Integer.parseInt(userInput); + } + catch(NumberFormatException e){ + throw new IllegalArgumentException("[ERROR] 시도 횟수는 숫자여야 한다."); + } + if(inputMoves < 0){ + throw new IllegalArgumentException("[ERROR] 시도 횟수는 양의 정수여야 한다."); + } + return inputMoves; + } } \ No newline at end of file From 729860fb17851a53629ed4b1cf7e36c25e4141a0 Mon Sep 17 00:00:00 2001 From: Yuseunggeun Date: Wed, 15 Mar 2023 14:15:50 +0900 Subject: [PATCH 05/16] feat: generate random number and control position --- FeatureList.md | 4 ++-- src/main/java/racingcar/Car.java | 15 ++++++++++++--- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/FeatureList.md b/FeatureList.md index 31692a5..e6c074b 100644 --- a/FeatureList.md +++ b/FeatureList.md @@ -8,10 +8,10 @@ ### (구현)2.시도할 회수를 입력받고 게임을 시작한다. - 잘못된 값을 입력 시 에러메시지를 출력시키고 다시 입력받는다. -### 3.자동차마다 0~9 사이 무작위 값을 생성한다. +### (구현)3.자동차마다 0~9 사이 무작위 값을 생성한다. - Randoms API를 활용한다. -### 4.생성한 값이 4이상이면 전진한다. +### (구현)4.생성한 값이 4이상이면 전진한다. - Car 객체의 position 값을 증가시킨다. ### 5.매 이동마다 자동차들의 이동 상황을 출력한다. diff --git a/src/main/java/racingcar/Car.java b/src/main/java/racingcar/Car.java index 77f0aff..99f3781 100644 --- a/src/main/java/racingcar/Car.java +++ b/src/main/java/racingcar/Car.java @@ -1,16 +1,25 @@ package racingcar; +import static camp.nextstep.edu.missionutils.Randoms.pickNumberInRange; public class Car { private final String name; private int position = 0; - public Car(String name) { this.name = name; } - public String getName(){ return this.name; } - // 추가 기능 구현 + public void updatePosition(){ + + if(canAdvance()){ + position++; + } + } + public boolean canAdvance(){ + + return pickNumberInRange(0, 9) >= 4; + } + } From ee4bd1f35dba4ba627c545ded8d90fb7b41d0714 Mon Sep 17 00:00:00 2001 From: Yuseunggeun Date: Wed, 15 Mar 2023 14:27:06 +0900 Subject: [PATCH 06/16] feat: print game progress --- FeatureList.md | 2 +- src/main/java/racingcar/Application.java | 25 +++++++++++++++--------- src/main/java/racingcar/Car.java | 16 +++++++++++++++ 3 files changed, 33 insertions(+), 10 deletions(-) diff --git a/FeatureList.md b/FeatureList.md index e6c074b..f4da0d3 100644 --- a/FeatureList.md +++ b/FeatureList.md @@ -14,7 +14,7 @@ ### (구현)4.생성한 값이 4이상이면 전진한다. - Car 객체의 position 값을 증가시킨다. -### 5.매 이동마다 자동차들의 이동 상황을 출력한다. +### (구현)5.매 이동마다 자동차들의 이동 상황을 출력한다. ### 6.게임이 끝난 후 우승자를 출력한다. - 우승자가 여러 명일 경우 쉼표를 사용해 구분한다. diff --git a/src/main/java/racingcar/Application.java b/src/main/java/racingcar/Application.java index 6edc0b3..72b909f 100644 --- a/src/main/java/racingcar/Application.java +++ b/src/main/java/racingcar/Application.java @@ -1,6 +1,5 @@ package racingcar; -import static camp.nextstep.edu.missionutils.Randoms.pickNumberInRange; import static camp.nextstep.edu.missionutils.Console.readLine; public class Application { @@ -17,18 +16,26 @@ class Game{ Game(){ } - /* - public void printCars(){ - for(Car car : cars){ - System.out.println(car.getName()); - } - }*/ public void initiateGame(){ makeCars(inputCarNames()); maxMove = inputMaxMoves(); - //printCars(); - System.out.println(maxMove); + playGame(); + } + public void playGame(){ + System.out.println("실행 결과"); + while(currentMove < maxMove){ + printProgress(); + currentMove++; + } + + } + public void printProgress(){ + for(Car car : cars){ + car.updatePosition(); + car.printCar(); + } + System.out.println(); } public void makeCars(String[] carNames){ diff --git a/src/main/java/racingcar/Car.java b/src/main/java/racingcar/Car.java index 99f3781..dba52cb 100644 --- a/src/main/java/racingcar/Car.java +++ b/src/main/java/racingcar/Car.java @@ -11,6 +11,10 @@ public String getName(){ return this.name; } + public void printCar(){ + System.out.println(name+" : "+getPosition()); + } + public void updatePosition(){ if(canAdvance()){ @@ -22,4 +26,16 @@ public boolean canAdvance(){ return pickNumberInRange(0, 9) >= 4; } + public String getPosition(){ + + return repeatString(position, "-"); + } + + public static String repeatString(int count, String str){ + StringBuilder result = new StringBuilder(); + for(int cnt = 0; cnt < count; cnt++){ + result.append(str); + } + return result.toString(); + } } From 8076ee5f21c1b9fa3bb3df343e3300c1362884ca Mon Sep 17 00:00:00 2001 From: Yuseunggeun Date: Wed, 15 Mar 2023 14:33:56 +0900 Subject: [PATCH 07/16] refactor: modify method name --- src/main/java/racingcar/Car.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/main/java/racingcar/Car.java b/src/main/java/racingcar/Car.java index dba52cb..ecaa3f4 100644 --- a/src/main/java/racingcar/Car.java +++ b/src/main/java/racingcar/Car.java @@ -12,7 +12,7 @@ public String getName(){ } public void printCar(){ - System.out.println(name+" : "+getPosition()); + System.out.println(name+" : "+getPositionString()); } public void updatePosition(){ @@ -25,8 +25,11 @@ public boolean canAdvance(){ return pickNumberInRange(0, 9) >= 4; } + public int getPosition(){ + return position; + } - public String getPosition(){ + public String getPositionString(){ return repeatString(position, "-"); } From aecfb42021ae64e4b75a35ba4dee1dbbbb2bdc09 Mon Sep 17 00:00:00 2001 From: Yuseunggeun Date: Wed, 15 Mar 2023 14:53:07 +0900 Subject: [PATCH 08/16] feat: print winners --- FeatureList.md | 2 +- src/main/java/racingcar/Application.java | 34 +++++++++++++++++++++++- 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/FeatureList.md b/FeatureList.md index f4da0d3..d3305d8 100644 --- a/FeatureList.md +++ b/FeatureList.md @@ -16,5 +16,5 @@ ### (구현)5.매 이동마다 자동차들의 이동 상황을 출력한다. -### 6.게임이 끝난 후 우승자를 출력한다. +### (구현)6.게임이 끝난 후 우승자를 출력한다. - 우승자가 여러 명일 경우 쉼표를 사용해 구분한다. diff --git a/src/main/java/racingcar/Application.java b/src/main/java/racingcar/Application.java index 72b909f..09ae9a2 100644 --- a/src/main/java/racingcar/Application.java +++ b/src/main/java/racingcar/Application.java @@ -2,6 +2,8 @@ import static camp.nextstep.edu.missionutils.Console.readLine; +import java.util.ArrayList; + public class Application { public static void main(String[] args) { Game game = new Game(); @@ -13,6 +15,7 @@ class Game{ private int currentMove = 0; private int maxMove; private Car[] cars; + private ArrayList winners; Game(){ } @@ -28,7 +31,8 @@ public void playGame(){ printProgress(); currentMove++; } - + winners = findWinner(); + printWinners(); } public void printProgress(){ for(Car car : cars){ @@ -37,6 +41,11 @@ public void printProgress(){ } System.out.println(); } + public void printWinners(){ + + String str = String.join(", ", winners); + System.out.println("최종 우승자 : " + str); + } public void makeCars(String[] carNames){ @@ -98,4 +107,27 @@ public int checkValidMoves(String userInput) { } return inputMoves; } + + public int findMaxPosition(){ + + int maxPosition = 0; + for(Car car : cars){ + maxPosition = Math.max(maxPosition, car.getPosition()); + } + return maxPosition; + } + + public ArrayList findWinner(){ + + ArrayList winners = new ArrayList<>(); + int maxPosition = findMaxPosition(); + + for(Car car : cars){ + if(car.getPosition() == maxPosition){ + winners.add(car.getName()); + } + } + return winners; + } + } \ No newline at end of file From 60762f495704094fc6149ce0d1edc7d9c7284360 Mon Sep 17 00:00:00 2001 From: Yuseunggeun Date: Thu, 16 Mar 2023 14:20:36 +0900 Subject: [PATCH 09/16] refactor: follow java convention --- src/main/java/racingcar/Application.java | 74 +++++++++++------------- src/main/java/racingcar/Car.java | 17 +++--- 2 files changed, 44 insertions(+), 47 deletions(-) diff --git a/src/main/java/racingcar/Application.java b/src/main/java/racingcar/Application.java index 09ae9a2..ec75f62 100644 --- a/src/main/java/racingcar/Application.java +++ b/src/main/java/racingcar/Application.java @@ -11,59 +11,35 @@ public static void main(String[] args) { } } -class Game{ +class Game { private int currentMove = 0; private int maxMove; private Car[] cars; private ArrayList winners; - Game(){ - - } + Game() {} public void initiateGame(){ makeCars(inputCarNames()); maxMove = inputMaxMoves(); playGame(); } - public void playGame(){ - System.out.println("실행 결과"); - while(currentMove < maxMove){ - printProgress(); - currentMove++; - } - winners = findWinner(); - printWinners(); - } - public void printProgress(){ - for(Car car : cars){ - car.updatePosition(); - car.printCar(); - } - System.out.println(); - } - public void printWinners(){ - String str = String.join(", ", winners); - System.out.println("최종 우승자 : " + str); - } - - public void makeCars(String[] carNames){ + public void makeCars(String[] carNames) { cars = new Car[carNames.length]; - for(int index = 0; index < carNames.length; index++){ + for(int index = 0; index < carNames.length; index++) { cars[index] = new Car(carNames[index]); } } - public String[] inputCarNames(){ + public String[] inputCarNames() { System.out.println("경주할 자동차 이름을 입력하세요.(이름은 쉼표(,) 기준으로 구분)"); String userInput = readLine(); String[] cars = userInput.split(","); try{ checkValidNames(cars); - } - catch(IllegalArgumentException e){ + } catch(IllegalArgumentException e) { System.out.println(e.getMessage()); return inputCarNames(); } @@ -78,15 +54,14 @@ public void checkValidNames(String[] cars) { } } - public int inputMaxMoves(){ + public int inputMaxMoves() { System.out.println("시도할 회수는 몇회인가요?"); String userInput = readLine(); int inputMoves; try{ inputMoves = checkValidMoves(userInput); - } - catch(IllegalArgumentException e){ + } catch(IllegalArgumentException e) { System.out.println(e.getMessage()); return inputMaxMoves(); } @@ -98,17 +73,16 @@ public int checkValidMoves(String userInput) { int inputMoves; try{ inputMoves = Integer.parseInt(userInput); - } - catch(NumberFormatException e){ + } catch(NumberFormatException e) { throw new IllegalArgumentException("[ERROR] 시도 횟수는 숫자여야 한다."); } - if(inputMoves < 0){ + if(inputMoves <= 0){ throw new IllegalArgumentException("[ERROR] 시도 횟수는 양의 정수여야 한다."); } return inputMoves; } - public int findMaxPosition(){ + public int findMaxPosition() { int maxPosition = 0; for(Car car : cars){ @@ -117,17 +91,37 @@ public int findMaxPosition(){ return maxPosition; } - public ArrayList findWinner(){ + public void playGame() { + System.out.println("실행 결과"); + while(currentMove < maxMove) { + printProgress(); + currentMove++; + } + winners = findWinner(); + printWinners(); + } + public void printProgress() { + for(Car car : cars){ + car.updatePosition(); + car.printCar(); + } + System.out.println(); + } + public ArrayList findWinner() { ArrayList winners = new ArrayList<>(); int maxPosition = findMaxPosition(); - for(Car car : cars){ - if(car.getPosition() == maxPosition){ + for(Car car : cars) { + if(car.getPosition() == maxPosition) { winners.add(car.getName()); } } return winners; } + public void printWinners() { + String str = String.join(", ", winners); + System.out.println("최종 우승자 : " + str); + } } \ No newline at end of file diff --git a/src/main/java/racingcar/Car.java b/src/main/java/racingcar/Car.java index ecaa3f4..d743836 100644 --- a/src/main/java/racingcar/Car.java +++ b/src/main/java/racingcar/Car.java @@ -5,36 +5,39 @@ public class Car { private final String name; private int position = 0; public Car(String name) { + this.name = name; } - public String getName(){ + public String getName() { + return this.name; } - public void printCar(){ + public void printCar() { + System.out.println(name+" : "+getPositionString()); } - public void updatePosition(){ + public void updatePosition() { if(canAdvance()){ position++; } } - public boolean canAdvance(){ + public boolean canAdvance() { return pickNumberInRange(0, 9) >= 4; } - public int getPosition(){ + public int getPosition() { return position; } - public String getPositionString(){ + public String getPositionString() { return repeatString(position, "-"); } - public static String repeatString(int count, String str){ + public static String repeatString(int count, String str) { StringBuilder result = new StringBuilder(); for(int cnt = 0; cnt < count; cnt++){ result.append(str); From e222da1204051fcd49c7a2204f4fed368621adaa Mon Sep 17 00:00:00 2001 From: Yuseunggeun Date: Fri, 24 Mar 2023 12:35:41 +0900 Subject: [PATCH 10/16] refactor: change static import to import --- src/main/java/racingcar/Application.java | 243 ++++++++++++----------- src/main/java/racingcar/Car.java | 71 ++++--- 2 files changed, 163 insertions(+), 151 deletions(-) diff --git a/src/main/java/racingcar/Application.java b/src/main/java/racingcar/Application.java index ec75f62..73a6100 100644 --- a/src/main/java/racingcar/Application.java +++ b/src/main/java/racingcar/Application.java @@ -1,127 +1,134 @@ package racingcar; -import static camp.nextstep.edu.missionutils.Console.readLine; - import java.util.ArrayList; +import camp.nextstep.edu.missionutils.Console; + public class Application { - public static void main(String[] args) { - Game game = new Game(); - game.initiateGame(); - } + public static void main(String[] args) { + Game game = new Game(); + game.initiateGame(); + } } class Game { - private int currentMove = 0; - private int maxMove; - private Car[] cars; - private ArrayList winners; - Game() {} - public void initiateGame(){ - - makeCars(inputCarNames()); - maxMove = inputMaxMoves(); - playGame(); - } - - public void makeCars(String[] carNames) { - - cars = new Car[carNames.length]; - for(int index = 0; index < carNames.length; index++) { - cars[index] = new Car(carNames[index]); - } - } - - public String[] inputCarNames() { - - System.out.println("경주할 자동차 이름을 입력하세요.(이름은 쉼표(,) 기준으로 구분)"); - String userInput = readLine(); - String[] cars = userInput.split(","); - try{ - checkValidNames(cars); - } catch(IllegalArgumentException e) { - System.out.println(e.getMessage()); - return inputCarNames(); - } - return cars; - } - public void checkValidNames(String[] cars) { - - for (String car : cars) { - if (car.length() > 5) { - throw new IllegalArgumentException("[ERROR] 이름은 5자 이하여야 합니다."); - } - } - } - - public int inputMaxMoves() { - - System.out.println("시도할 회수는 몇회인가요?"); - String userInput = readLine(); - int inputMoves; - try{ - inputMoves = checkValidMoves(userInput); - } catch(IllegalArgumentException e) { - System.out.println(e.getMessage()); - return inputMaxMoves(); - } - return inputMoves; - } - - public int checkValidMoves(String userInput) { - - int inputMoves; - try{ - inputMoves = Integer.parseInt(userInput); - } catch(NumberFormatException e) { - throw new IllegalArgumentException("[ERROR] 시도 횟수는 숫자여야 한다."); - } - if(inputMoves <= 0){ - throw new IllegalArgumentException("[ERROR] 시도 횟수는 양의 정수여야 한다."); - } - return inputMoves; - } - - public int findMaxPosition() { - - int maxPosition = 0; - for(Car car : cars){ - maxPosition = Math.max(maxPosition, car.getPosition()); - } - return maxPosition; - } - - public void playGame() { - System.out.println("실행 결과"); - while(currentMove < maxMove) { - printProgress(); - currentMove++; - } - winners = findWinner(); - printWinners(); - } - public void printProgress() { - for(Car car : cars){ - car.updatePosition(); - car.printCar(); - } - System.out.println(); - } - public ArrayList findWinner() { - - ArrayList winners = new ArrayList<>(); - int maxPosition = findMaxPosition(); - - for(Car car : cars) { - if(car.getPosition() == maxPosition) { - winners.add(car.getName()); - } - } - return winners; - } - public void printWinners() { - - String str = String.join(", ", winners); - System.out.println("최종 우승자 : " + str); - } + private int currentMove = 0; + private int maxMove; + private Car[] cars; + private ArrayList winners; + + Game() { + } + + public void initiateGame() { + + makeCars(inputCarNames()); + maxMove = inputMaxMoves(); + playGame(); + } + + public void makeCars(String[] carNames) { + + cars = new Car[carNames.length]; + for (int index = 0; index < carNames.length; index++) { + cars[index] = new Car(carNames[index]); + } + } + + public String[] inputCarNames() { + + System.out.println("경주할 자동차 이름을 입력하세요.(이름은 쉼표(,) 기준으로 구분)"); + String userInput = Console.readLine(); + String[] cars = userInput.split(","); + try { + checkValidNames(cars); + } catch (IllegalArgumentException e) { + System.out.println(e.getMessage()); + return inputCarNames(); + } + return cars; + } + + public void checkValidNames(String[] cars) { + + for (String car : cars) { + if (car.length() > 5) { + throw new IllegalArgumentException("[ERROR] 이름은 5자 이하여야 합니다."); + } + } + } + + public int inputMaxMoves() { + + System.out.println("시도할 회수는 몇회인가요?"); + String userInput = Console.readLine(); + int inputMoves; + try { + inputMoves = checkValidMoves(userInput); + } catch (IllegalArgumentException e) { + System.out.println(e.getMessage()); + return inputMaxMoves(); + } + return inputMoves; + } + + public int checkValidMoves(String userInput) { + + int inputMoves; + try { + inputMoves = Integer.parseInt(userInput); + } catch (NumberFormatException e) { + throw new IllegalArgumentException("[ERROR] 시도 횟수는 숫자여야 한다."); + } + if (inputMoves <= 0) { + throw new IllegalArgumentException("[ERROR] 시도 횟수는 양의 정수여야 한다."); + } + return inputMoves; + } + + public int findMaxPosition() { + + int maxPosition = 0; + for (Car car : cars) { + maxPosition = Math.max(maxPosition, car.getPosition()); + } + return maxPosition; + } + + public void playGame() { + System.out.println("실행 결과"); + while (currentMove < maxMove) { + printProgress(); + currentMove++; + } + winners = findWinner(); + printWinners(); + } + + public void printProgress() { + for (Car car : cars) { + car.updatePosition(); + car.printCar(); + } + System.out.println(); + } + + public ArrayList findWinner() { + + ArrayList winners = new ArrayList<>(); + int maxPosition = findMaxPosition(); + + for (Car car : cars) { + if (car.getPosition() == maxPosition) { + winners.add(car.getName()); + } + } + return winners; + } + + public void printWinners() { + + String str = String.join(", ", winners); + System.out.println("최종 우승자 : " + str); + } } \ No newline at end of file diff --git a/src/main/java/racingcar/Car.java b/src/main/java/racingcar/Car.java index d743836..e2adf12 100644 --- a/src/main/java/racingcar/Car.java +++ b/src/main/java/racingcar/Car.java @@ -1,47 +1,52 @@ package racingcar; -import static camp.nextstep.edu.missionutils.Randoms.pickNumberInRange; +import camp.nextstep.edu.missionutils.Randoms; + public class Car { - private final String name; - private int position = 0; - public Car(String name) { + private final String name; + private int position = 0; + + public Car(String name) { + + this.name = name; + } + + public String getName() { + + return this.name; + } - this.name = name; - } - public String getName() { + public void printCar() { - return this.name; - } + System.out.println(name + " : " + getPositionString()); + } - public void printCar() { + public void updatePosition() { - System.out.println(name+" : "+getPositionString()); - } + if (canAdvance()) { + position++; + } + } - public void updatePosition() { + public boolean canAdvance() { - if(canAdvance()){ - position++; - } - } - public boolean canAdvance() { + return Randoms.pickNumberInRange(0, 9) >= 4; + } - return pickNumberInRange(0, 9) >= 4; - } - public int getPosition() { - return position; - } + public int getPosition() { + return position; + } - public String getPositionString() { + public String getPositionString() { - return repeatString(position, "-"); - } + return repeatString(position, "-"); + } - public static String repeatString(int count, String str) { - StringBuilder result = new StringBuilder(); - for(int cnt = 0; cnt < count; cnt++){ - result.append(str); - } - return result.toString(); - } + public static String repeatString(int count, String str) { + StringBuilder result = new StringBuilder(); + for (int cnt = 0; cnt < count; cnt++) { + result.append(str); + } + return result.toString(); + } } From 8d347674133b84f8d534347b357cee82dfd4264e Mon Sep 17 00:00:00 2001 From: Yuseunggeun Date: Fri, 24 Mar 2023 12:43:10 +0900 Subject: [PATCH 11/16] refactor: separate class --- src/main/java/racingcar/Application.java | 126 ---------------------- src/main/java/racingcar/Game.java | 127 +++++++++++++++++++++++ src/main/java/tools/InputTool.java | 4 + src/main/java/tools/PrintTool.java | 4 + src/main/java/tools/Utility.java | 4 + 5 files changed, 139 insertions(+), 126 deletions(-) create mode 100644 src/main/java/racingcar/Game.java create mode 100644 src/main/java/tools/InputTool.java create mode 100644 src/main/java/tools/PrintTool.java create mode 100644 src/main/java/tools/Utility.java diff --git a/src/main/java/racingcar/Application.java b/src/main/java/racingcar/Application.java index 73a6100..e640043 100644 --- a/src/main/java/racingcar/Application.java +++ b/src/main/java/racingcar/Application.java @@ -1,134 +1,8 @@ package racingcar; -import java.util.ArrayList; - -import camp.nextstep.edu.missionutils.Console; - public class Application { public static void main(String[] args) { Game game = new Game(); game.initiateGame(); } } - -class Game { - private int currentMove = 0; - private int maxMove; - private Car[] cars; - private ArrayList winners; - - Game() { - } - - public void initiateGame() { - - makeCars(inputCarNames()); - maxMove = inputMaxMoves(); - playGame(); - } - - public void makeCars(String[] carNames) { - - cars = new Car[carNames.length]; - for (int index = 0; index < carNames.length; index++) { - cars[index] = new Car(carNames[index]); - } - } - - public String[] inputCarNames() { - - System.out.println("경주할 자동차 이름을 입력하세요.(이름은 쉼표(,) 기준으로 구분)"); - String userInput = Console.readLine(); - String[] cars = userInput.split(","); - try { - checkValidNames(cars); - } catch (IllegalArgumentException e) { - System.out.println(e.getMessage()); - return inputCarNames(); - } - return cars; - } - - public void checkValidNames(String[] cars) { - - for (String car : cars) { - if (car.length() > 5) { - throw new IllegalArgumentException("[ERROR] 이름은 5자 이하여야 합니다."); - } - } - } - - public int inputMaxMoves() { - - System.out.println("시도할 회수는 몇회인가요?"); - String userInput = Console.readLine(); - int inputMoves; - try { - inputMoves = checkValidMoves(userInput); - } catch (IllegalArgumentException e) { - System.out.println(e.getMessage()); - return inputMaxMoves(); - } - return inputMoves; - } - - public int checkValidMoves(String userInput) { - - int inputMoves; - try { - inputMoves = Integer.parseInt(userInput); - } catch (NumberFormatException e) { - throw new IllegalArgumentException("[ERROR] 시도 횟수는 숫자여야 한다."); - } - if (inputMoves <= 0) { - throw new IllegalArgumentException("[ERROR] 시도 횟수는 양의 정수여야 한다."); - } - return inputMoves; - } - - public int findMaxPosition() { - - int maxPosition = 0; - for (Car car : cars) { - maxPosition = Math.max(maxPosition, car.getPosition()); - } - return maxPosition; - } - - public void playGame() { - System.out.println("실행 결과"); - while (currentMove < maxMove) { - printProgress(); - currentMove++; - } - winners = findWinner(); - printWinners(); - } - - public void printProgress() { - for (Car car : cars) { - car.updatePosition(); - car.printCar(); - } - System.out.println(); - } - - public ArrayList findWinner() { - - ArrayList winners = new ArrayList<>(); - int maxPosition = findMaxPosition(); - - for (Car car : cars) { - if (car.getPosition() == maxPosition) { - winners.add(car.getName()); - } - } - return winners; - } - - public void printWinners() { - - String str = String.join(", ", winners); - System.out.println("최종 우승자 : " + str); - } -} \ No newline at end of file diff --git a/src/main/java/racingcar/Game.java b/src/main/java/racingcar/Game.java new file mode 100644 index 0000000..01074c4 --- /dev/null +++ b/src/main/java/racingcar/Game.java @@ -0,0 +1,127 @@ +package racingcar; + +import java.util.ArrayList; + +import camp.nextstep.edu.missionutils.Console; + +public class Game { + private int currentMove = 0; + private int maxMove; + private Car[] cars; + private ArrayList winners; + + Game() { + } + + public void initiateGame() { + + makeCars(inputCarNames()); + maxMove = inputMaxMoves(); + playGame(); + } + + public void makeCars(String[] carNames) { + + cars = new Car[carNames.length]; + for (int index = 0; index < carNames.length; index++) { + cars[index] = new Car(carNames[index]); + } + } + + public String[] inputCarNames() { + + System.out.println("경주할 자동차 이름을 입력하세요.(이름은 쉼표(,) 기준으로 구분)"); + String userInput = Console.readLine(); + String[] cars = userInput.split(","); + try { + checkValidNames(cars); + } catch (IllegalArgumentException e) { + System.out.println(e.getMessage()); + return inputCarNames(); + } + return cars; + } + + public void checkValidNames(String[] cars) { + + for (String car : cars) { + if (car.length() > 5) { + throw new IllegalArgumentException("[ERROR] 이름은 5자 이하여야 합니다."); + } + } + } + + public int inputMaxMoves() { + + System.out.println("시도할 회수는 몇회인가요?"); + String userInput = Console.readLine(); + int inputMoves; + try { + inputMoves = checkValidMoves(userInput); + } catch (IllegalArgumentException e) { + System.out.println(e.getMessage()); + return inputMaxMoves(); + } + return inputMoves; + } + + public int checkValidMoves(String userInput) { + + int inputMoves; + try { + inputMoves = Integer.parseInt(userInput); + } catch (NumberFormatException e) { + throw new IllegalArgumentException("[ERROR] 시도 횟수는 숫자여야 한다."); + } + if (inputMoves <= 0) { + throw new IllegalArgumentException("[ERROR] 시도 횟수는 양의 정수여야 한다."); + } + return inputMoves; + } + + public int findMaxPosition() { + + int maxPosition = 0; + for (Car car : cars) { + maxPosition = Math.max(maxPosition, car.getPosition()); + } + return maxPosition; + } + + public void playGame() { + System.out.println("실행 결과"); + while (currentMove < maxMove) { + printProgress(); + currentMove++; + } + winners = findWinner(); + printWinners(); + } + + public void printProgress() { + for (Car car : cars) { + car.updatePosition(); + car.printCar(); + } + System.out.println(); + } + + public ArrayList findWinner() { + + ArrayList winners = new ArrayList<>(); + int maxPosition = findMaxPosition(); + + for (Car car : cars) { + if (car.getPosition() == maxPosition) { + winners.add(car.getName()); + } + } + return winners; + } + + public void printWinners() { + + String str = String.join(", ", winners); + System.out.println("최종 우승자 : " + str); + } +} \ No newline at end of file diff --git a/src/main/java/tools/InputTool.java b/src/main/java/tools/InputTool.java new file mode 100644 index 0000000..ceca664 --- /dev/null +++ b/src/main/java/tools/InputTool.java @@ -0,0 +1,4 @@ +package tools; + +public class InputTool { +} diff --git a/src/main/java/tools/PrintTool.java b/src/main/java/tools/PrintTool.java new file mode 100644 index 0000000..255345f --- /dev/null +++ b/src/main/java/tools/PrintTool.java @@ -0,0 +1,4 @@ +package tools; + +public class PrintTool { +} diff --git a/src/main/java/tools/Utility.java b/src/main/java/tools/Utility.java new file mode 100644 index 0000000..069f00a --- /dev/null +++ b/src/main/java/tools/Utility.java @@ -0,0 +1,4 @@ +package tools; + +public class Utility { +} From be999d2556b88300f866987194af9a6a9a26b298 Mon Sep 17 00:00:00 2001 From: Yuseunggeun Date: Fri, 24 Mar 2023 13:31:36 +0900 Subject: [PATCH 12/16] refactor: add Validation class --- src/main/java/tools/ValidationTool.java | 26 +++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 src/main/java/tools/ValidationTool.java diff --git a/src/main/java/tools/ValidationTool.java b/src/main/java/tools/ValidationTool.java new file mode 100644 index 0000000..d12aae7 --- /dev/null +++ b/src/main/java/tools/ValidationTool.java @@ -0,0 +1,26 @@ +package tools; + +public class ValidationTool { + + public static void checkValidNames(String[] cars) { + + for (String car : cars) { + if (car.length() > 5) { + throw new IllegalArgumentException("[ERROR] 이름은 5자 이하여야 합니다."); + } + } + } + + public static void checkValidMoves(String userInput) { + + int inputMoves; + try { + inputMoves = Integer.parseInt(userInput); + } catch (NumberFormatException e) { + throw new IllegalArgumentException("[ERROR] 시도 횟수는 숫자여야 한다."); + } + if (inputMoves <= 0) { + throw new IllegalArgumentException("[ERROR] 시도 횟수는 양의 정수여야 한다."); + } + } +} From e599b6511ceb50c9751f2ad93039b2caffe9f713 Mon Sep 17 00:00:00 2001 From: Yuseunggeun Date: Fri, 24 Mar 2023 13:34:10 +0900 Subject: [PATCH 13/16] refactor: move functions to appropriate class --- src/main/java/racingcar/Car.java | 16 ++----- src/main/java/racingcar/Game.java | 76 ++++-------------------------- src/main/java/tools/InputTool.java | 28 +++++++++++ src/main/java/tools/PrintTool.java | 23 +++++++++ src/main/java/tools/Utility.java | 7 +++ 5 files changed, 70 insertions(+), 80 deletions(-) diff --git a/src/main/java/racingcar/Car.java b/src/main/java/racingcar/Car.java index e2adf12..47ffdf4 100644 --- a/src/main/java/racingcar/Car.java +++ b/src/main/java/racingcar/Car.java @@ -1,6 +1,7 @@ package racingcar; import camp.nextstep.edu.missionutils.Randoms; +import tools.Utility; public class Car { private final String name; @@ -16,11 +17,6 @@ public String getName() { return this.name; } - public void printCar() { - - System.out.println(name + " : " + getPositionString()); - } - public void updatePosition() { if (canAdvance()) { @@ -34,19 +30,13 @@ public boolean canAdvance() { } public int getPosition() { + return position; } public String getPositionString() { - return repeatString(position, "-"); + return Utility.repeatString(position, "-"); } - public static String repeatString(int count, String str) { - StringBuilder result = new StringBuilder(); - for (int cnt = 0; cnt < count; cnt++) { - result.append(str); - } - return result.toString(); - } } diff --git a/src/main/java/racingcar/Game.java b/src/main/java/racingcar/Game.java index 01074c4..af1ae36 100644 --- a/src/main/java/racingcar/Game.java +++ b/src/main/java/racingcar/Game.java @@ -2,7 +2,8 @@ import java.util.ArrayList; -import camp.nextstep.edu.missionutils.Console; +import tools.InputTool; +import tools.PrintTool; public class Game { private int currentMove = 0; @@ -15,12 +16,12 @@ public class Game { public void initiateGame() { - makeCars(inputCarNames()); - maxMove = inputMaxMoves(); + setCars(InputTool.getCarNames()); + setMaxMove(InputTool.getMaxMoves()); playGame(); } - public void makeCars(String[] carNames) { + public void setCars(String[] carNames) { cars = new Car[carNames.length]; for (int index = 0; index < carNames.length; index++) { @@ -28,55 +29,9 @@ public void makeCars(String[] carNames) { } } - public String[] inputCarNames() { + public void setMaxMove(int maxMove) { - System.out.println("경주할 자동차 이름을 입력하세요.(이름은 쉼표(,) 기준으로 구분)"); - String userInput = Console.readLine(); - String[] cars = userInput.split(","); - try { - checkValidNames(cars); - } catch (IllegalArgumentException e) { - System.out.println(e.getMessage()); - return inputCarNames(); - } - return cars; - } - - public void checkValidNames(String[] cars) { - - for (String car : cars) { - if (car.length() > 5) { - throw new IllegalArgumentException("[ERROR] 이름은 5자 이하여야 합니다."); - } - } - } - - public int inputMaxMoves() { - - System.out.println("시도할 회수는 몇회인가요?"); - String userInput = Console.readLine(); - int inputMoves; - try { - inputMoves = checkValidMoves(userInput); - } catch (IllegalArgumentException e) { - System.out.println(e.getMessage()); - return inputMaxMoves(); - } - return inputMoves; - } - - public int checkValidMoves(String userInput) { - - int inputMoves; - try { - inputMoves = Integer.parseInt(userInput); - } catch (NumberFormatException e) { - throw new IllegalArgumentException("[ERROR] 시도 횟수는 숫자여야 한다."); - } - if (inputMoves <= 0) { - throw new IllegalArgumentException("[ERROR] 시도 횟수는 양의 정수여야 한다."); - } - return inputMoves; + this.maxMove = maxMove; } public int findMaxPosition() { @@ -91,19 +46,11 @@ public int findMaxPosition() { public void playGame() { System.out.println("실행 결과"); while (currentMove < maxMove) { - printProgress(); + PrintTool.printProgress(cars); currentMove++; } winners = findWinner(); - printWinners(); - } - - public void printProgress() { - for (Car car : cars) { - car.updatePosition(); - car.printCar(); - } - System.out.println(); + PrintTool.printWinners(winners); } public ArrayList findWinner() { @@ -119,9 +66,4 @@ public ArrayList findWinner() { return winners; } - public void printWinners() { - - String str = String.join(", ", winners); - System.out.println("최종 우승자 : " + str); - } } \ No newline at end of file diff --git a/src/main/java/tools/InputTool.java b/src/main/java/tools/InputTool.java index ceca664..1a72c8f 100644 --- a/src/main/java/tools/InputTool.java +++ b/src/main/java/tools/InputTool.java @@ -1,4 +1,32 @@ package tools; +import camp.nextstep.edu.missionutils.Console; + public class InputTool { + public static String[] getCarNames() { + + System.out.println("경주할 자동차 이름을 입력하세요.(이름은 쉼표(,) 기준으로 구분)"); + String userInput = Console.readLine(); + String[] cars = userInput.split(","); + try { + ValidationTool.checkValidNames(cars); + } catch (IllegalArgumentException e) { + System.out.println(e.getMessage()); + return getCarNames(); + } + return cars; + } + + public static int getMaxMoves() { + + System.out.println("시도할 회수는 몇회인가요?"); + String userInput = Console.readLine(); + try { + ValidationTool.checkValidMoves(userInput); + } catch (IllegalArgumentException e) { + System.out.println(e.getMessage()); + return getMaxMoves(); + } + return Integer.parseInt(userInput); + } } diff --git a/src/main/java/tools/PrintTool.java b/src/main/java/tools/PrintTool.java index 255345f..4b9bd58 100644 --- a/src/main/java/tools/PrintTool.java +++ b/src/main/java/tools/PrintTool.java @@ -1,4 +1,27 @@ package tools; +import java.util.ArrayList; + +import racingcar.Car; + public class PrintTool { + + public static void printProgress(Car[] cars) { + for (Car car : cars) { + car.updatePosition(); + printCarPosition(car); + } + System.out.println(); + } + + public static void printCarPosition(Car car) { + + System.out.println(car.getName() + " : " + car.getPositionString()); + } + + public static void printWinners(ArrayList winners) { + + String str = String.join(", ", winners); + System.out.println("최종 우승자 : " + str); + } } diff --git a/src/main/java/tools/Utility.java b/src/main/java/tools/Utility.java index 069f00a..ad9523c 100644 --- a/src/main/java/tools/Utility.java +++ b/src/main/java/tools/Utility.java @@ -1,4 +1,11 @@ package tools; public class Utility { + public static String repeatString(int count, String str) { + StringBuilder result = new StringBuilder(); + for (int cnt = 0; cnt < count; cnt++) { + result.append(str); + } + return result.toString(); + } } From 96ba4a7639216a8c2a87fc83904a977a30dcb49b Mon Sep 17 00:00:00 2001 From: Yuseunggeun Date: Fri, 24 Mar 2023 13:55:42 +0900 Subject: [PATCH 14/16] refactor: change Arraylist to List --- src/main/java/racingcar/Game.java | 17 ++++++++--------- src/main/java/tools/PrintTool.java | 6 +++--- 2 files changed, 11 insertions(+), 12 deletions(-) diff --git a/src/main/java/racingcar/Game.java b/src/main/java/racingcar/Game.java index af1ae36..2a2091c 100644 --- a/src/main/java/racingcar/Game.java +++ b/src/main/java/racingcar/Game.java @@ -1,6 +1,7 @@ package racingcar; import java.util.ArrayList; +import java.util.List; import tools.InputTool; import tools.PrintTool; @@ -8,10 +9,10 @@ public class Game { private int currentMove = 0; private int maxMove; - private Car[] cars; - private ArrayList winners; + private final List cars; Game() { + cars = new ArrayList<>(); } public void initiateGame() { @@ -23,9 +24,8 @@ public void initiateGame() { public void setCars(String[] carNames) { - cars = new Car[carNames.length]; - for (int index = 0; index < carNames.length; index++) { - cars[index] = new Car(carNames[index]); + for (String carName : carNames) { + cars.add(new Car(carName)); } } @@ -49,13 +49,12 @@ public void playGame() { PrintTool.printProgress(cars); currentMove++; } - winners = findWinner(); - PrintTool.printWinners(winners); + PrintTool.printWinners(findWinner()); } - public ArrayList findWinner() { + public List findWinner() { - ArrayList winners = new ArrayList<>(); + List winners = new ArrayList<>(); int maxPosition = findMaxPosition(); for (Car car : cars) { diff --git a/src/main/java/tools/PrintTool.java b/src/main/java/tools/PrintTool.java index 4b9bd58..7214cbc 100644 --- a/src/main/java/tools/PrintTool.java +++ b/src/main/java/tools/PrintTool.java @@ -1,12 +1,12 @@ package tools; -import java.util.ArrayList; +import java.util.List; import racingcar.Car; public class PrintTool { - public static void printProgress(Car[] cars) { + public static void printProgress(List cars) { for (Car car : cars) { car.updatePosition(); printCarPosition(car); @@ -19,7 +19,7 @@ public static void printCarPosition(Car car) { System.out.println(car.getName() + " : " + car.getPositionString()); } - public static void printWinners(ArrayList winners) { + public static void printWinners(List winners) { String str = String.join(", ", winners); System.out.println("최종 우승자 : " + str); From c2eb49dcf4136f99667a5508b54bd73b865637d0 Mon Sep 17 00:00:00 2001 From: Yuseunggeun Date: Fri, 24 Mar 2023 14:02:32 +0900 Subject: [PATCH 15/16] refactor: change variable name --- src/main/java/tools/Utility.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/tools/Utility.java b/src/main/java/tools/Utility.java index ad9523c..3c2e71f 100644 --- a/src/main/java/tools/Utility.java +++ b/src/main/java/tools/Utility.java @@ -2,10 +2,10 @@ public class Utility { public static String repeatString(int count, String str) { - StringBuilder result = new StringBuilder(); + StringBuilder stringBuilder = new StringBuilder(); for (int cnt = 0; cnt < count; cnt++) { - result.append(str); + stringBuilder.append(str); } - return result.toString(); + return stringBuilder.toString(); } } From f401394a0ba526a2dce96a603f26caaecffd996e Mon Sep 17 00:00:00 2001 From: Yuseunggeun Date: Fri, 24 Mar 2023 14:07:44 +0900 Subject: [PATCH 16/16] refactor: change access modifier --- src/main/java/racingcar/Car.java | 20 ++++++++++---------- src/main/java/racingcar/Game.java | 26 +++++++++++++------------- 2 files changed, 23 insertions(+), 23 deletions(-) diff --git a/src/main/java/racingcar/Car.java b/src/main/java/racingcar/Car.java index 47ffdf4..c52f763 100644 --- a/src/main/java/racingcar/Car.java +++ b/src/main/java/racingcar/Car.java @@ -17,26 +17,26 @@ public String getName() { return this.name; } - public void updatePosition() { + public int getPosition() { - if (canAdvance()) { - position++; - } + return position; } - public boolean canAdvance() { + public String getPositionString() { - return Randoms.pickNumberInRange(0, 9) >= 4; + return Utility.repeatString(position, "-"); } - public int getPosition() { + public void updatePosition() { - return position; + if (canAdvance()) { + position++; + } } - public String getPositionString() { + private boolean canAdvance() { - return Utility.repeatString(position, "-"); + return Randoms.pickNumberInRange(0, 9) >= 4; } } diff --git a/src/main/java/racingcar/Game.java b/src/main/java/racingcar/Game.java index 2a2091c..90921d3 100644 --- a/src/main/java/racingcar/Game.java +++ b/src/main/java/racingcar/Game.java @@ -22,28 +22,19 @@ public void initiateGame() { playGame(); } - public void setCars(String[] carNames) { + private void setCars(String[] carNames) { for (String carName : carNames) { cars.add(new Car(carName)); } } - public void setMaxMove(int maxMove) { + private void setMaxMove(int maxMove) { this.maxMove = maxMove; } - public int findMaxPosition() { - - int maxPosition = 0; - for (Car car : cars) { - maxPosition = Math.max(maxPosition, car.getPosition()); - } - return maxPosition; - } - - public void playGame() { + private void playGame() { System.out.println("실행 결과"); while (currentMove < maxMove) { PrintTool.printProgress(cars); @@ -52,7 +43,7 @@ public void playGame() { PrintTool.printWinners(findWinner()); } - public List findWinner() { + private List findWinner() { List winners = new ArrayList<>(); int maxPosition = findMaxPosition(); @@ -65,4 +56,13 @@ public List findWinner() { return winners; } + private int findMaxPosition() { + + int maxPosition = 0; + for (Car car : cars) { + maxPosition = Math.max(maxPosition, car.getPosition()); + } + return maxPosition; + } + } \ No newline at end of file