From 27e310efc0842f4caea1b7e4cdfc32e0b2a08623 Mon Sep 17 00:00:00 2001 From: kmj990929 Date: Sat, 19 Dec 2020 13:20:35 +0900 Subject: [PATCH 01/19] =?UTF-8?q?docs:=20=EA=B5=AC=ED=98=84=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5=20=EB=AA=A9=EB=A1=9D=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 docs/README.md diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 000000000..dc82f2e4f --- /dev/null +++ b/docs/README.md @@ -0,0 +1,23 @@ +# 지하철 노선도 경로 조회 미션 +: 두 지하철 역 사이의 최단 경로 / 최단 시간의 경로를 조회한다. + +본 프로젝트는 우아한 테크코스 3기 프리코스 백엔드 과정의 2차 코딩테스트 미션을 구현한 것입니다. + +## 구현 기능 목록 +#### 기능 선택 +- [ ] 화면을 출력한다. +- [ ] 사용자가 원하는 기능을 기호로 입력받는다. + - [ ] 사용자가 입력한 기호가 기능목록에 존재하지 않는 경우 에러를 출력한다. + +#### 경로 조회 +- [ ] 초기 노선 정보로 초기화한다. +- [ ] 출발역과 도착역을 입력한다. +- [ ] 출발역과 도착역 입력이 유효한지 검사한다. + - [ ] 출발역과 도착역이 기존에 존재하는 역인지 확인한다. + - [ ] 출발역과 도착역이 서로 다른지 확인한다. +- [ ] 두 역 사이의 (기준에 따른) 경로를 계산한다. + - [ ] 두 역이 연결되어 있지 않은 경우 에러를 출력한다. +- [ ] 조회 결과를 출력한다. + - [ ] 이동 거리를 출력한다. + - [ ] 소요 시간을 출력한다. + - [ ] 경로를 출력한다. From de030efd3276a56d9095408266f8bc2cecfc757e Mon Sep 17 00:00:00 2001 From: kmj990929 Date: Sat, 19 Dec 2020 13:26:27 +0900 Subject: [PATCH 02/19] =?UTF-8?q?feat:=20=EB=A9=94=EC=9D=B8=20=ED=99=94?= =?UTF-8?q?=EB=A9=B4=20=EC=B6=9C=EB=A0=A5=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/view/OutputView.java | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 src/main/java/subway/view/OutputView.java diff --git a/src/main/java/subway/view/OutputView.java b/src/main/java/subway/view/OutputView.java new file mode 100644 index 000000000..414c769ed --- /dev/null +++ b/src/main/java/subway/view/OutputView.java @@ -0,0 +1,11 @@ +package subway.view; + +public class OutputView { + + private static final String MAIN_SCREEN = "\n## 메인 화면\n1. 경로 조회\nQ. 종료"; + + public static void printMainScreen() { + System.out.println(MAIN_SCREEN); + } + +} From 0ccc26a2b2ee568da83d87b30f86e86abfa5d0cf Mon Sep 17 00:00:00 2001 From: kmj990929 Date: Sat, 19 Dec 2020 13:29:17 +0900 Subject: [PATCH 03/19] =?UTF-8?q?feat:=20=EC=84=B8=EB=B6=80=20=ED=99=94?= =?UTF-8?q?=EB=A9=B4=20=EC=B6=9C=EB=A0=A5=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 2 +- src/main/java/subway/view/OutputView.java | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/docs/README.md b/docs/README.md index dc82f2e4f..daee061bc 100644 --- a/docs/README.md +++ b/docs/README.md @@ -5,7 +5,7 @@ ## 구현 기능 목록 #### 기능 선택 -- [ ] 화면을 출력한다. +- [X] 화면을 출력한다. - [ ] 사용자가 원하는 기능을 기호로 입력받는다. - [ ] 사용자가 입력한 기호가 기능목록에 존재하지 않는 경우 에러를 출력한다. diff --git a/src/main/java/subway/view/OutputView.java b/src/main/java/subway/view/OutputView.java index 414c769ed..b8dfd4977 100644 --- a/src/main/java/subway/view/OutputView.java +++ b/src/main/java/subway/view/OutputView.java @@ -3,9 +3,13 @@ public class OutputView { private static final String MAIN_SCREEN = "\n## 메인 화면\n1. 경로 조회\nQ. 종료"; + private static final String SUB_SCREEN = "\n## 경로 기준\n1. 최단 거리\n2. 최소 시간\nB. 돌아가기"; public static void printMainScreen() { System.out.println(MAIN_SCREEN); } + public static void printSubScreen() { + System.out.println(SUB_SCREEN); + } } From 621f8fab27723e95c4eabc44360610065fc6909f Mon Sep 17 00:00:00 2001 From: kmj990929 Date: Sat, 19 Dec 2020 13:35:51 +0900 Subject: [PATCH 04/19] =?UTF-8?q?feat:=20=EC=82=AC=EC=9A=A9=EC=9E=90?= =?UTF-8?q?=EA=B0=80=20=EC=9B=90=ED=95=98=EB=8A=94=20=EA=B8=B0=EB=8A=A5?= =?UTF-8?q?=EC=9D=84=20=EC=9E=85=EB=A0=A5=EB=B0=9B=EB=8A=94=20=EB=A9=94?= =?UTF-8?q?=EC=86=8C=EB=93=9C=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 2 +- src/main/java/subway/view/InputView.java | 20 ++++++++++++++++++++ src/main/java/subway/view/OutputView.java | 5 +++++ 3 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 src/main/java/subway/view/InputView.java diff --git a/docs/README.md b/docs/README.md index daee061bc..4e94610ce 100644 --- a/docs/README.md +++ b/docs/README.md @@ -6,7 +6,7 @@ ## 구현 기능 목록 #### 기능 선택 - [X] 화면을 출력한다. -- [ ] 사용자가 원하는 기능을 기호로 입력받는다. +- [X] 사용자가 원하는 기능을 기호로 입력받는다. - [ ] 사용자가 입력한 기호가 기능목록에 존재하지 않는 경우 에러를 출력한다. #### 경로 조회 diff --git a/src/main/java/subway/view/InputView.java b/src/main/java/subway/view/InputView.java new file mode 100644 index 000000000..098255af9 --- /dev/null +++ b/src/main/java/subway/view/InputView.java @@ -0,0 +1,20 @@ +package subway.view; + +import java.util.Scanner; + +public class InputView { + private final Scanner scanner; + + public InputView(Scanner scanner) { + this.scanner = scanner; + } + + private String scanMenu() { + OutputView.printSelectMessage(); + return getInput(); + } + + private String getInput() { + return scanner.nextLine(); + } +} diff --git a/src/main/java/subway/view/OutputView.java b/src/main/java/subway/view/OutputView.java index b8dfd4977..32cbfb526 100644 --- a/src/main/java/subway/view/OutputView.java +++ b/src/main/java/subway/view/OutputView.java @@ -4,6 +4,7 @@ public class OutputView { private static final String MAIN_SCREEN = "\n## 메인 화면\n1. 경로 조회\nQ. 종료"; private static final String SUB_SCREEN = "\n## 경로 기준\n1. 최단 거리\n2. 최소 시간\nB. 돌아가기"; + private static final String SELECT_MESSAGE = "\n## 원하는 기능을 선택하세요."; public static void printMainScreen() { System.out.println(MAIN_SCREEN); @@ -12,4 +13,8 @@ public static void printMainScreen() { public static void printSubScreen() { System.out.println(SUB_SCREEN); } + + public static void printSelectMessage() { + System.out.println(SELECT_MESSAGE); + } } From 319916055811381d7d0a5ae0dee9057903c3b560 Mon Sep 17 00:00:00 2001 From: kmj990929 Date: Sat, 19 Dec 2020 14:11:07 +0900 Subject: [PATCH 05/19] =?UTF-8?q?feat:=20=EC=9E=85=EB=A0=A5=20=EA=B8=B0?= =?UTF-8?q?=ED=98=B8=20=EC=9C=A0=ED=9A=A8=EC=84=B1=20=EA=B2=80=EC=82=AC=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 2 +- src/main/java/subway/Application.java | 7 +++- .../subway/controller/MenuController.java | 33 +++++++++++++++ src/main/java/subway/domain/Criterions.java | 40 +++++++++++++++++++ src/main/java/subway/domain/Menus.java | 38 ++++++++++++++++++ .../exception/NonExistentMenuException.java | 10 +++++ src/main/java/subway/view/InputView.java | 2 +- 7 files changed, 129 insertions(+), 3 deletions(-) create mode 100644 src/main/java/subway/controller/MenuController.java create mode 100644 src/main/java/subway/domain/Criterions.java create mode 100644 src/main/java/subway/domain/Menus.java create mode 100644 src/main/java/subway/domain/exception/NonExistentMenuException.java diff --git a/docs/README.md b/docs/README.md index 4e94610ce..c293a7e97 100644 --- a/docs/README.md +++ b/docs/README.md @@ -7,7 +7,7 @@ #### 기능 선택 - [X] 화면을 출력한다. - [X] 사용자가 원하는 기능을 기호로 입력받는다. - - [ ] 사용자가 입력한 기호가 기능목록에 존재하지 않는 경우 에러를 출력한다. + - [X] 사용자가 입력한 기호가 기능목록에 존재하지 않는 경우 에러를 출력한다. #### 경로 조회 - [ ] 초기 노선 정보로 초기화한다. diff --git a/src/main/java/subway/Application.java b/src/main/java/subway/Application.java index 0bcf786cc..8f4475815 100644 --- a/src/main/java/subway/Application.java +++ b/src/main/java/subway/Application.java @@ -1,10 +1,15 @@ package subway; +import subway.controller.MenuController; +import subway.view.InputView; + import java.util.Scanner; public class Application { public static void main(String[] args) { final Scanner scanner = new Scanner(System.in); - // TODO: 프로그램 구현 + InputView inputView = new InputView(scanner); + MenuController menuController = new MenuController(); + menuController.scanMainMenu(inputView); } } diff --git a/src/main/java/subway/controller/MenuController.java b/src/main/java/subway/controller/MenuController.java new file mode 100644 index 000000000..40221d5c9 --- /dev/null +++ b/src/main/java/subway/controller/MenuController.java @@ -0,0 +1,33 @@ +package subway.controller; + +import subway.domain.Criterions; +import subway.domain.Menus; +import subway.view.InputView; +import subway.view.OutputView; + +public class MenuController { + + private static final Menus menus = new Menus(); + private static final Criterions criterions = new Criterions(); + + public MenuController() { + } + + public String scanMainMenu(InputView inputView) { + OutputView.printMainScreen(); + String selectedMenu; + do { + selectedMenu = inputView.scanMenu(); + } while(!menus.isValid(selectedMenu)); + return selectedMenu; + } + + public String scanCriterions(InputView inputView) { + OutputView.printSubScreen(); + String selectedCriterion; + do { + selectedCriterion = inputView.scanMenu(); + } while(!criterions.isValid(selectedCriterion)); + return selectedCriterion; + } +} diff --git a/src/main/java/subway/domain/Criterions.java b/src/main/java/subway/domain/Criterions.java new file mode 100644 index 000000000..815158e82 --- /dev/null +++ b/src/main/java/subway/domain/Criterions.java @@ -0,0 +1,40 @@ +package subway.domain; + +import subway.domain.exception.NonExistentMenuException;; + +import java.util.Arrays; +import java.util.List; + +public class Criterions { + + private static final String distanceSign = "1"; + private static final String timeSign = "2"; + private static final String backSign = "B"; + private static final List signs = Arrays + .asList(new String[]{distanceSign, timeSign, backSign}); + + public Criterions() { + } + + public boolean isValid(String sign) { + try { + checkValidationOf(sign); + return true; + } catch (RuntimeException e) { + System.out.println(e.getMessage()); + return false; + } + } + private void checkValidationOf(String sign) { + if (!isInSignList(sign)) { + throw new NonExistentMenuException(); + } + } + + private boolean isInSignList(String sign) { + if (signs.contains(sign)) { + return true; + } + return false; + } +} diff --git a/src/main/java/subway/domain/Menus.java b/src/main/java/subway/domain/Menus.java new file mode 100644 index 000000000..a3d1bedf6 --- /dev/null +++ b/src/main/java/subway/domain/Menus.java @@ -0,0 +1,38 @@ +package subway.domain; + +import java.util.Arrays; +import java.util.List; +import subway.domain.exception.NonExistentMenuException; + +public class Menus { + + private static final String searchSign = "1"; + private static final String quitSign = "Q"; + private static final List signs = Arrays + .asList(new String[]{searchSign, quitSign}); + + public Menus() { + } + + public boolean isValid(String sign) { + try { + checkValidationOf(sign); + return true; + } catch (RuntimeException e) { + System.out.println(e.getMessage()); + return false; + } + } + private void checkValidationOf(String sign) { + if (!isInSignList(sign)) { + throw new NonExistentMenuException(); + } + } + + private boolean isInSignList(String sign) { + if (signs.contains(sign)) { + return true; + } + return false; + } +} diff --git a/src/main/java/subway/domain/exception/NonExistentMenuException.java b/src/main/java/subway/domain/exception/NonExistentMenuException.java new file mode 100644 index 000000000..4cf03bb94 --- /dev/null +++ b/src/main/java/subway/domain/exception/NonExistentMenuException.java @@ -0,0 +1,10 @@ +package subway.domain.exception; + +public class NonExistentMenuException extends RuntimeException { + + private static final String NON_EXISTENT_MENU_ERROR_MESSAGE = "\n[ERROR] 선택할 수 없는 기능입니다."; + + public NonExistentMenuException() { + super(NON_EXISTENT_MENU_ERROR_MESSAGE); + } +} diff --git a/src/main/java/subway/view/InputView.java b/src/main/java/subway/view/InputView.java index 098255af9..11aea3e70 100644 --- a/src/main/java/subway/view/InputView.java +++ b/src/main/java/subway/view/InputView.java @@ -9,7 +9,7 @@ public InputView(Scanner scanner) { this.scanner = scanner; } - private String scanMenu() { + public String scanMenu() { OutputView.printSelectMessage(); return getInput(); } From cbd38245698379068e6d378029e544b6df4a9ca3 Mon Sep 17 00:00:00 2001 From: kmj990929 Date: Sat, 19 Dec 2020 14:18:56 +0900 Subject: [PATCH 06/19] =?UTF-8?q?refactor:=20Menus=EC=99=80=20Criterions?= =?UTF-8?q?=EA=B0=80=20MenuController=EC=9D=98=20=EC=83=81=EC=86=8D?= =?UTF-8?q?=EC=9D=84=20=EB=B0=9B=EB=8F=84=EB=A1=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../subway/controller/MenuController.java | 27 +++++++++++++++++++ src/main/java/subway/domain/Criterions.java | 26 ++---------------- src/main/java/subway/domain/Menus.java | 6 +++-- 3 files changed, 33 insertions(+), 26 deletions(-) diff --git a/src/main/java/subway/controller/MenuController.java b/src/main/java/subway/controller/MenuController.java index 40221d5c9..0177870d2 100644 --- a/src/main/java/subway/controller/MenuController.java +++ b/src/main/java/subway/controller/MenuController.java @@ -2,13 +2,18 @@ import subway.domain.Criterions; import subway.domain.Menus; +import subway.domain.exception.NonExistentMenuException; import subway.view.InputView; import subway.view.OutputView; +import java.util.Arrays; +import java.util.List; + public class MenuController { private static final Menus menus = new Menus(); private static final Criterions criterions = new Criterions(); + private static final List signs = Arrays.asList(new String[]{}); public MenuController() { } @@ -30,4 +35,26 @@ public String scanCriterions(InputView inputView) { } while(!criterions.isValid(selectedCriterion)); return selectedCriterion; } + + public boolean isValid(String sign) { + try { + checkValidationOf(sign); + return true; + } catch (RuntimeException e) { + System.out.println(e.getMessage()); + return false; + } + } + private void checkValidationOf(String sign) { + if (!isInSignList(sign)) { + throw new NonExistentMenuException(); + } + } + + private boolean isInSignList(String sign) { + if (signs.contains(sign)) { + return true; + } + return false; + } } diff --git a/src/main/java/subway/domain/Criterions.java b/src/main/java/subway/domain/Criterions.java index 815158e82..b9106616e 100644 --- a/src/main/java/subway/domain/Criterions.java +++ b/src/main/java/subway/domain/Criterions.java @@ -1,11 +1,11 @@ package subway.domain; -import subway.domain.exception.NonExistentMenuException;; +import subway.controller.MenuController; import java.util.Arrays; import java.util.List; -public class Criterions { +public class Criterions extends MenuController { private static final String distanceSign = "1"; private static final String timeSign = "2"; @@ -15,26 +15,4 @@ public class Criterions { public Criterions() { } - - public boolean isValid(String sign) { - try { - checkValidationOf(sign); - return true; - } catch (RuntimeException e) { - System.out.println(e.getMessage()); - return false; - } - } - private void checkValidationOf(String sign) { - if (!isInSignList(sign)) { - throw new NonExistentMenuException(); - } - } - - private boolean isInSignList(String sign) { - if (signs.contains(sign)) { - return true; - } - return false; - } } diff --git a/src/main/java/subway/domain/Menus.java b/src/main/java/subway/domain/Menus.java index a3d1bedf6..c5c29abfb 100644 --- a/src/main/java/subway/domain/Menus.java +++ b/src/main/java/subway/domain/Menus.java @@ -1,10 +1,12 @@ package subway.domain; +import subway.domain.exception.NonExistentMenuException; +import subway.controller.MenuController; + import java.util.Arrays; import java.util.List; -import subway.domain.exception.NonExistentMenuException; -public class Menus { +public class Menus extends MenuController { private static final String searchSign = "1"; private static final String quitSign = "Q"; From f0a27fafd4a7e5cf2efb82f9da8f5a0569176f2a Mon Sep 17 00:00:00 2001 From: kmj990929 Date: Sat, 19 Dec 2020 14:22:22 +0900 Subject: [PATCH 07/19] =?UTF-8?q?refactor:=20MenuController=20->=20MenuSca?= =?UTF-8?q?nner=20=ED=81=B4=EB=9E=98=EC=8A=A4=EB=AA=85=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/Application.java | 4 ++-- .../controller/{MenuController.java => MenuScanner.java} | 4 ++-- src/main/java/subway/domain/Criterions.java | 4 ++-- src/main/java/subway/domain/Menus.java | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) rename src/main/java/subway/controller/{MenuController.java => MenuScanner.java} (96%) diff --git a/src/main/java/subway/Application.java b/src/main/java/subway/Application.java index 8f4475815..ab59f9374 100644 --- a/src/main/java/subway/Application.java +++ b/src/main/java/subway/Application.java @@ -1,6 +1,6 @@ package subway; -import subway.controller.MenuController; +import subway.controller.MenuScanner; import subway.view.InputView; import java.util.Scanner; @@ -9,7 +9,7 @@ public class Application { public static void main(String[] args) { final Scanner scanner = new Scanner(System.in); InputView inputView = new InputView(scanner); - MenuController menuController = new MenuController(); + MenuScanner menuController = new MenuScanner(); menuController.scanMainMenu(inputView); } } diff --git a/src/main/java/subway/controller/MenuController.java b/src/main/java/subway/controller/MenuScanner.java similarity index 96% rename from src/main/java/subway/controller/MenuController.java rename to src/main/java/subway/controller/MenuScanner.java index 0177870d2..effa5118f 100644 --- a/src/main/java/subway/controller/MenuController.java +++ b/src/main/java/subway/controller/MenuScanner.java @@ -9,13 +9,13 @@ import java.util.Arrays; import java.util.List; -public class MenuController { +public class MenuScanner { private static final Menus menus = new Menus(); private static final Criterions criterions = new Criterions(); private static final List signs = Arrays.asList(new String[]{}); - public MenuController() { + public MenuScanner() { } public String scanMainMenu(InputView inputView) { diff --git a/src/main/java/subway/domain/Criterions.java b/src/main/java/subway/domain/Criterions.java index b9106616e..71733df46 100644 --- a/src/main/java/subway/domain/Criterions.java +++ b/src/main/java/subway/domain/Criterions.java @@ -1,11 +1,11 @@ package subway.domain; -import subway.controller.MenuController; +import subway.controller.MenuScanner; import java.util.Arrays; import java.util.List; -public class Criterions extends MenuController { +public class Criterions extends MenuScanner { private static final String distanceSign = "1"; private static final String timeSign = "2"; diff --git a/src/main/java/subway/domain/Menus.java b/src/main/java/subway/domain/Menus.java index c5c29abfb..eb18f337e 100644 --- a/src/main/java/subway/domain/Menus.java +++ b/src/main/java/subway/domain/Menus.java @@ -1,12 +1,12 @@ package subway.domain; import subway.domain.exception.NonExistentMenuException; -import subway.controller.MenuController; +import subway.controller.MenuScanner; import java.util.Arrays; import java.util.List; -public class Menus extends MenuController { +public class Menus extends MenuScanner { private static final String searchSign = "1"; private static final String quitSign = "Q"; From cec7e7cf5713482eb4681c4633221cc630f30fed Mon Sep 17 00:00:00 2001 From: kmj990929 Date: Sat, 19 Dec 2020 14:25:28 +0900 Subject: [PATCH 08/19] =?UTF-8?q?refactor:=20Menus=20->=20Functions=20?= =?UTF-8?q?=ED=81=B4=EB=9E=98=EC=8A=A4=EB=AA=85=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/subway/Application.java | 4 ++-- src/main/java/subway/controller/MenuScanner.java | 14 +++++++------- .../subway/domain/{Menus.java => Functions.java} | 4 ++-- 3 files changed, 11 insertions(+), 11 deletions(-) rename src/main/java/subway/domain/{Menus.java => Functions.java} (93%) diff --git a/src/main/java/subway/Application.java b/src/main/java/subway/Application.java index ab59f9374..32981ca64 100644 --- a/src/main/java/subway/Application.java +++ b/src/main/java/subway/Application.java @@ -9,7 +9,7 @@ public class Application { public static void main(String[] args) { final Scanner scanner = new Scanner(System.in); InputView inputView = new InputView(scanner); - MenuScanner menuController = new MenuScanner(); - menuController.scanMainMenu(inputView); + MenuScanner menuScanner = new MenuScanner(); + menuScanner.scanFunctions(inputView); } } diff --git a/src/main/java/subway/controller/MenuScanner.java b/src/main/java/subway/controller/MenuScanner.java index effa5118f..40dba1bea 100644 --- a/src/main/java/subway/controller/MenuScanner.java +++ b/src/main/java/subway/controller/MenuScanner.java @@ -1,7 +1,7 @@ package subway.controller; import subway.domain.Criterions; -import subway.domain.Menus; +import subway.domain.Functions; import subway.domain.exception.NonExistentMenuException; import subway.view.InputView; import subway.view.OutputView; @@ -11,20 +11,20 @@ public class MenuScanner { - private static final Menus menus = new Menus(); + private static final Functions functions = new Functions(); private static final Criterions criterions = new Criterions(); private static final List signs = Arrays.asList(new String[]{}); public MenuScanner() { } - public String scanMainMenu(InputView inputView) { + public String scanFunctions(InputView inputView) { OutputView.printMainScreen(); - String selectedMenu; + String selectedFunction; do { - selectedMenu = inputView.scanMenu(); - } while(!menus.isValid(selectedMenu)); - return selectedMenu; + selectedFunction = inputView.scanMenu(); + } while(!functions.isValid(selectedFunction)); + return selectedFunction; } public String scanCriterions(InputView inputView) { diff --git a/src/main/java/subway/domain/Menus.java b/src/main/java/subway/domain/Functions.java similarity index 93% rename from src/main/java/subway/domain/Menus.java rename to src/main/java/subway/domain/Functions.java index eb18f337e..08b926df1 100644 --- a/src/main/java/subway/domain/Menus.java +++ b/src/main/java/subway/domain/Functions.java @@ -6,14 +6,14 @@ import java.util.Arrays; import java.util.List; -public class Menus extends MenuScanner { +public class Functions extends MenuScanner { private static final String searchSign = "1"; private static final String quitSign = "Q"; private static final List signs = Arrays .asList(new String[]{searchSign, quitSign}); - public Menus() { + public Functions() { } public boolean isValid(String sign) { From 6b7eb6bb4ed6f4d7c79ea2fcd6b9d83adbf0d858 Mon Sep 17 00:00:00 2001 From: kmj990929 Date: Sat, 19 Dec 2020 14:39:41 +0900 Subject: [PATCH 09/19] =?UTF-8?q?refactor:=20MenuScanner=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=EC=9D=98=20=EC=B1=85=EC=9E=84=20=EC=9D=BC?= =?UTF-8?q?=EB=B6=80=EB=A5=BC=20Menus=20=ED=81=B4=EB=9E=98=EC=8A=A4?= =?UTF-8?q?=EB=A1=9C=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/subway/controller/MenuScanner.java | 27 -------------- src/main/java/subway/domain/Criterions.java | 9 +++-- src/main/java/subway/domain/Functions.java | 30 +++------------- src/main/java/subway/domain/Menus.java | 36 +++++++++++++++++++ 4 files changed, 47 insertions(+), 55 deletions(-) create mode 100644 src/main/java/subway/domain/Menus.java diff --git a/src/main/java/subway/controller/MenuScanner.java b/src/main/java/subway/controller/MenuScanner.java index 40dba1bea..2c73bf19d 100644 --- a/src/main/java/subway/controller/MenuScanner.java +++ b/src/main/java/subway/controller/MenuScanner.java @@ -2,18 +2,13 @@ import subway.domain.Criterions; import subway.domain.Functions; -import subway.domain.exception.NonExistentMenuException; import subway.view.InputView; import subway.view.OutputView; -import java.util.Arrays; -import java.util.List; - public class MenuScanner { private static final Functions functions = new Functions(); private static final Criterions criterions = new Criterions(); - private static final List signs = Arrays.asList(new String[]{}); public MenuScanner() { } @@ -35,26 +30,4 @@ public String scanCriterions(InputView inputView) { } while(!criterions.isValid(selectedCriterion)); return selectedCriterion; } - - public boolean isValid(String sign) { - try { - checkValidationOf(sign); - return true; - } catch (RuntimeException e) { - System.out.println(e.getMessage()); - return false; - } - } - private void checkValidationOf(String sign) { - if (!isInSignList(sign)) { - throw new NonExistentMenuException(); - } - } - - private boolean isInSignList(String sign) { - if (signs.contains(sign)) { - return true; - } - return false; - } } diff --git a/src/main/java/subway/domain/Criterions.java b/src/main/java/subway/domain/Criterions.java index 71733df46..5a91f9674 100644 --- a/src/main/java/subway/domain/Criterions.java +++ b/src/main/java/subway/domain/Criterions.java @@ -1,11 +1,9 @@ package subway.domain; -import subway.controller.MenuScanner; - import java.util.Arrays; import java.util.List; -public class Criterions extends MenuScanner { +public class Criterions extends Menus { private static final String distanceSign = "1"; private static final String timeSign = "2"; @@ -15,4 +13,9 @@ public class Criterions extends MenuScanner { public Criterions() { } + + @Override + public List getSigns() { + return signs; + } } diff --git a/src/main/java/subway/domain/Functions.java b/src/main/java/subway/domain/Functions.java index 08b926df1..3b1c6f7e2 100644 --- a/src/main/java/subway/domain/Functions.java +++ b/src/main/java/subway/domain/Functions.java @@ -1,40 +1,20 @@ package subway.domain; -import subway.domain.exception.NonExistentMenuException; -import subway.controller.MenuScanner; - import java.util.Arrays; import java.util.List; -public class Functions extends MenuScanner { +public class Functions extends Menus { private static final String searchSign = "1"; private static final String quitSign = "Q"; - private static final List signs = Arrays + private static List signs = Arrays .asList(new String[]{searchSign, quitSign}); public Functions() { } - public boolean isValid(String sign) { - try { - checkValidationOf(sign); - return true; - } catch (RuntimeException e) { - System.out.println(e.getMessage()); - return false; - } - } - private void checkValidationOf(String sign) { - if (!isInSignList(sign)) { - throw new NonExistentMenuException(); - } - } - - private boolean isInSignList(String sign) { - if (signs.contains(sign)) { - return true; - } - return false; + @Override + public List getSigns() { + return signs; } } diff --git a/src/main/java/subway/domain/Menus.java b/src/main/java/subway/domain/Menus.java new file mode 100644 index 000000000..9eb661e8a --- /dev/null +++ b/src/main/java/subway/domain/Menus.java @@ -0,0 +1,36 @@ +package subway.domain; + +import java.util.Arrays; +import java.util.List; +import subway.domain.exception.NonExistentMenuException; + +public abstract class Menus { + + private static final List signs = Arrays.asList(new String[]{}); + + public boolean isValid(String sign) { + try { + checkValidationOf(sign); + return true; + } catch (RuntimeException e) { + System.out.println(e.getMessage()); + return false; + } + } + private void checkValidationOf(String sign) { + if (!isInSignList(sign)) { + throw new NonExistentMenuException(); + } + } + + private boolean isInSignList(String sign) { + if (getSigns().contains(sign)) { + return true; + } + return false; + } + + public List getSigns() { + return signs; + } +} From 1881f37ca632b3445050ea84eb017e738fe05251 Mon Sep 17 00:00:00 2001 From: kmj990929 Date: Sat, 19 Dec 2020 14:41:23 +0900 Subject: [PATCH 10/19] =?UTF-8?q?docs:=20=EA=B5=AC=ED=98=84=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5=20=EB=AA=A9=EB=A1=9D=20=EC=97=85=EB=8D=B0=EC=9D=B4?= =?UTF-8?q?=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/README.md b/docs/README.md index c293a7e97..a23bdf75f 100644 --- a/docs/README.md +++ b/docs/README.md @@ -8,6 +8,8 @@ - [X] 화면을 출력한다. - [X] 사용자가 원하는 기능을 기호로 입력받는다. - [X] 사용자가 입력한 기호가 기능목록에 존재하지 않는 경우 에러를 출력한다. +- [ ] 종료(Q)를 선택하면 프로그램을 종료한다. +- [ ] 돌아가기(B)를 선택하면 메인 화면으로 돌아간다. #### 경로 조회 - [ ] 초기 노선 정보로 초기화한다. From d698f18cf86a1d32eb68425e5e07445457f6b0e5 Mon Sep 17 00:00:00 2001 From: kmj990929 Date: Sat, 19 Dec 2020 14:52:27 +0900 Subject: [PATCH 11/19] =?UTF-8?q?feat:=20Quit=20=EA=B8=B0=EB=8A=A5=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 2 +- src/main/java/subway/Application.java | 11 ++++++++++- src/main/java/subway/domain/Functions.java | 7 +++++++ src/main/java/subway/domain/Menus.java | 2 ++ 4 files changed, 20 insertions(+), 2 deletions(-) diff --git a/docs/README.md b/docs/README.md index a23bdf75f..547f00e28 100644 --- a/docs/README.md +++ b/docs/README.md @@ -8,7 +8,7 @@ - [X] 화면을 출력한다. - [X] 사용자가 원하는 기능을 기호로 입력받는다. - [X] 사용자가 입력한 기호가 기능목록에 존재하지 않는 경우 에러를 출력한다. -- [ ] 종료(Q)를 선택하면 프로그램을 종료한다. +- [X] 종료(Q)를 선택하면 프로그램을 종료한다. - [ ] 돌아가기(B)를 선택하면 메인 화면으로 돌아간다. #### 경로 조회 diff --git a/src/main/java/subway/Application.java b/src/main/java/subway/Application.java index 32981ca64..ac0d9e85c 100644 --- a/src/main/java/subway/Application.java +++ b/src/main/java/subway/Application.java @@ -1,6 +1,7 @@ package subway; import subway.controller.MenuScanner; +import subway.domain.Menus; import subway.view.InputView; import java.util.Scanner; @@ -9,7 +10,15 @@ public class Application { public static void main(String[] args) { final Scanner scanner = new Scanner(System.in); InputView inputView = new InputView(scanner); + run(inputView); + } + + private static void run(InputView inputView) { MenuScanner menuScanner = new MenuScanner(); - menuScanner.scanFunctions(inputView); + boolean quit = false; + do { + String selectedMenu = menuScanner.scanFunctions(inputView); + quit = Menus.functions.isQuit(selectedMenu); + } while(!quit); } } diff --git a/src/main/java/subway/domain/Functions.java b/src/main/java/subway/domain/Functions.java index 3b1c6f7e2..9f9ca178c 100644 --- a/src/main/java/subway/domain/Functions.java +++ b/src/main/java/subway/domain/Functions.java @@ -17,4 +17,11 @@ public Functions() { public List getSigns() { return signs; } + + public boolean isQuit(String menu) { + if (menu.equals(quitSign)) { + return true; + } + return false; + } } diff --git a/src/main/java/subway/domain/Menus.java b/src/main/java/subway/domain/Menus.java index 9eb661e8a..00a583e51 100644 --- a/src/main/java/subway/domain/Menus.java +++ b/src/main/java/subway/domain/Menus.java @@ -6,6 +6,8 @@ public abstract class Menus { + public static final Functions functions = new Functions(); + public static final Criterions criterions = new Criterions(); private static final List signs = Arrays.asList(new String[]{}); public boolean isValid(String sign) { From 5c95e1791fe0357b87313e850940151c2cf9f6f4 Mon Sep 17 00:00:00 2001 From: kmj990929 Date: Sat, 19 Dec 2020 15:23:05 +0900 Subject: [PATCH 12/19] =?UTF-8?q?feat:=20Back=20=EA=B8=B0=EB=8A=A5=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/Application.java | 12 +++++++----- src/main/java/subway/controller/MenuScanner.java | 11 +++++++++++ src/main/java/subway/domain/Criterions.java | 7 +++++++ src/main/java/subway/domain/Functions.java | 2 +- src/main/java/subway/domain/Menus.java | 15 +++++++++++++++ 5 files changed, 41 insertions(+), 6 deletions(-) diff --git a/src/main/java/subway/Application.java b/src/main/java/subway/Application.java index ac0d9e85c..df050be13 100644 --- a/src/main/java/subway/Application.java +++ b/src/main/java/subway/Application.java @@ -15,10 +15,12 @@ public static void main(String[] args) { private static void run(InputView inputView) { MenuScanner menuScanner = new MenuScanner(); - boolean quit = false; - do { - String selectedMenu = menuScanner.scanFunctions(inputView); - quit = Menus.functions.isQuit(selectedMenu); - } while(!quit); + String selectedMenus = menuScanner.scanMenus(inputView); + boolean quit = Menus.isQuit(selectedMenus); + while (!quit) { + Menus.run(selectedMenus); + selectedMenus = menuScanner.scanMenus(inputView); + quit = Menus.isQuit(selectedMenus); + } } } diff --git a/src/main/java/subway/controller/MenuScanner.java b/src/main/java/subway/controller/MenuScanner.java index 2c73bf19d..c1198db5b 100644 --- a/src/main/java/subway/controller/MenuScanner.java +++ b/src/main/java/subway/controller/MenuScanner.java @@ -2,6 +2,7 @@ import subway.domain.Criterions; import subway.domain.Functions; +import subway.domain.Menus; import subway.view.InputView; import subway.view.OutputView; @@ -13,6 +14,16 @@ public class MenuScanner { public MenuScanner() { } + public String scanMenus(InputView inputView) { + String selectedFunction = scanFunctions(inputView); + boolean quit = Menus.isQuit(selectedFunction); + if (quit) { + return selectedFunction; + } + String selectedCriterion = scanCriterions(inputView); + return selectedCriterion; + } + public String scanFunctions(InputView inputView) { OutputView.printMainScreen(); String selectedFunction; diff --git a/src/main/java/subway/domain/Criterions.java b/src/main/java/subway/domain/Criterions.java index 5a91f9674..cabaa0e0a 100644 --- a/src/main/java/subway/domain/Criterions.java +++ b/src/main/java/subway/domain/Criterions.java @@ -18,4 +18,11 @@ public Criterions() { public List getSigns() { return signs; } + + public static boolean isBack(String sign) { + if (sign.equals(backSign)) { + return true; + } + return false; + } } diff --git a/src/main/java/subway/domain/Functions.java b/src/main/java/subway/domain/Functions.java index 9f9ca178c..50c517a01 100644 --- a/src/main/java/subway/domain/Functions.java +++ b/src/main/java/subway/domain/Functions.java @@ -18,7 +18,7 @@ public List getSigns() { return signs; } - public boolean isQuit(String menu) { + public static boolean isQuit(String menu) { if (menu.equals(quitSign)) { return true; } diff --git a/src/main/java/subway/domain/Menus.java b/src/main/java/subway/domain/Menus.java index 00a583e51..14ef006d0 100644 --- a/src/main/java/subway/domain/Menus.java +++ b/src/main/java/subway/domain/Menus.java @@ -10,6 +10,21 @@ public abstract class Menus { public static final Criterions criterions = new Criterions(); private static final List signs = Arrays.asList(new String[]{}); + public static void run(String selectedCriterions) { + if (isBack(selectedCriterions)) { + return; + } + System.out.println("run"); + } + + public static boolean isQuit(String sign) { + return functions.isQuit(sign); + } + + public static boolean isBack(String sign) { + return criterions.isBack(sign); + } + public boolean isValid(String sign) { try { checkValidationOf(sign); From 823255be8d07e2cfdc0118a1991abdd273a949ba Mon Sep 17 00:00:00 2001 From: kmj990929 Date: Sat, 19 Dec 2020 15:24:44 +0900 Subject: [PATCH 13/19] =?UTF-8?q?docs:=20=EA=B5=AC=ED=98=84=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5=20=EB=AA=A9=EB=A1=9D=20=EC=97=85=EB=8D=B0=EC=9D=B4?= =?UTF-8?q?=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/README.md b/docs/README.md index 547f00e28..19bf1903a 100644 --- a/docs/README.md +++ b/docs/README.md @@ -9,7 +9,7 @@ - [X] 사용자가 원하는 기능을 기호로 입력받는다. - [X] 사용자가 입력한 기호가 기능목록에 존재하지 않는 경우 에러를 출력한다. - [X] 종료(Q)를 선택하면 프로그램을 종료한다. -- [ ] 돌아가기(B)를 선택하면 메인 화면으로 돌아간다. +- [X] 돌아가기(B)를 선택하면 메인 화면으로 돌아간다. #### 경로 조회 - [ ] 초기 노선 정보로 초기화한다. From 14441c9a0e84b68f6c3b44edc156fa0d2cb85f03 Mon Sep 17 00:00:00 2001 From: kmj990929 Date: Sat, 19 Dec 2020 15:38:06 +0900 Subject: [PATCH 14/19] =?UTF-8?q?feat:=20=EC=B4=88=EA=B8=B0=20=EC=97=AD,?= =?UTF-8?q?=20=EB=85=B8=EC=84=A0=20=EC=A0=95=EB=B3=B4=EB=A1=9C=20=EC=B4=88?= =?UTF-8?q?=EA=B8=B0=20=EC=84=A4=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/Application.java | 2 + .../java/subway/controller/Initializer.java | 51 +++++++++++++++++++ 2 files changed, 53 insertions(+) create mode 100644 src/main/java/subway/controller/Initializer.java diff --git a/src/main/java/subway/Application.java b/src/main/java/subway/Application.java index df050be13..f85e40299 100644 --- a/src/main/java/subway/Application.java +++ b/src/main/java/subway/Application.java @@ -1,5 +1,6 @@ package subway; +import subway.controller.Initializer; import subway.controller.MenuScanner; import subway.domain.Menus; import subway.view.InputView; @@ -14,6 +15,7 @@ public static void main(String[] args) { } private static void run(InputView inputView) { + Initializer.set(); MenuScanner menuScanner = new MenuScanner(); String selectedMenus = menuScanner.scanMenus(inputView); boolean quit = Menus.isQuit(selectedMenus); diff --git a/src/main/java/subway/controller/Initializer.java b/src/main/java/subway/controller/Initializer.java new file mode 100644 index 000000000..c7a7a34dd --- /dev/null +++ b/src/main/java/subway/controller/Initializer.java @@ -0,0 +1,51 @@ +package subway.controller; + +import subway.domain.Station; +import subway.domain.StationRepository; +import subway.domain.Line; +import subway.domain.LineRepository; + +import java.util.Arrays; +import java.util.List; + +public class Initializer { + + private static final String station1 = "교대역"; + private static final String station2 = "강남역"; + private static final String station3 = "역삼역"; + private static final String station4 = "남부터미널역"; + private static final String station5 = "양재역"; + private static final String station6 = "양재시민의숲역"; + private static final String station7 = "매봉역"; + + private static final String line1 = "2호선"; + private static final String line2 = "3호선"; + private static final String line3 = "신분당선"; + + private static final List initStations = Arrays + .asList(station1, station2, station3, station4, station5, station6, station7); + private static final List initLines = Arrays + .asList(line1, line2, line3); + + private Initializer() { + } + + public static void set() { + makeStations(); + makeLines(); + } + + private static void makeStations() { + for (String stationName : initStations) { + Station station = new Station(stationName); + StationRepository.addStation(station); + } + } + + private static void makeLines() { + for (String lineName : initLines) { + Line line = new Line(lineName); + LineRepository.addLine(line); + } + } +} From aba969068adafe44daaf02e7c461b502f5fadb20 Mon Sep 17 00:00:00 2001 From: kmj990929 Date: Sat, 19 Dec 2020 15:43:32 +0900 Subject: [PATCH 15/19] =?UTF-8?q?feat:=20=EC=B4=88=EA=B8=B0=20=EB=85=B8?= =?UTF-8?q?=EC=84=A0=20=EC=A0=95=EB=B3=B4=EB=A1=9C=20=EC=97=AD=20=EC=97=B0?= =?UTF-8?q?=EA=B2=B0=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/subway/controller/Initializer.java | 44 ++++++++++++++----- src/main/java/subway/domain/Line.java | 20 ++++++++- 2 files changed, 52 insertions(+), 12 deletions(-) diff --git a/src/main/java/subway/controller/Initializer.java b/src/main/java/subway/controller/Initializer.java index c7a7a34dd..202eb43b9 100644 --- a/src/main/java/subway/controller/Initializer.java +++ b/src/main/java/subway/controller/Initializer.java @@ -5,10 +5,13 @@ import subway.domain.Line; import subway.domain.LineRepository; +import java.util.ArrayList; import java.util.Arrays; +import java.util.HashMap; import java.util.List; public class Initializer { + private static final int ORDER_CONSTANT = 1; private static final String station1 = "교대역"; private static final String station2 = "강남역"; @@ -24,28 +27,47 @@ public class Initializer { private static final List initStations = Arrays .asList(station1, station2, station3, station4, station5, station6, station7); - private static final List initLines = Arrays - .asList(line1, line2, line3); + private static final List line1Stations = Arrays.asList(station1, station2, station3); + private static final List line2Stations = Arrays.asList(station1, station4, station5, station7); + private static final List line3Stations = Arrays.asList(station2, station5, station6); + + private static final HashMap> initLines = new HashMap>() {{ + put(line1, line1Stations); + put(line2, line2Stations); + put(line3, line3Stations); + }}; private Initializer() { } public static void set() { - makeStations(); - makeLines(); + HashMap stations = makeStations(); + List lineNameList = new ArrayList(initLines.keySet()); + for (int i = 0; i < lineNameList.size(); i++) { + String lineName = lineNameList.get(i); + makeLine(lineName); + } } - private static void makeStations() { - for (String stationName : initStations) { + private static HashMap makeStations() { + HashMap stations = new HashMap(); + for (int i = 0; i < initStations.size(); i++) { + String stationName = initStations.get(i); Station station = new Station(stationName); StationRepository.addStation(station); + stations.put(stationName, station); } + return stations; } - private static void makeLines() { - for (String lineName : initLines) { - Line line = new Line(lineName); - LineRepository.addLine(line); + private static void makeLine(String lineName) { + Line line = new Line(lineName); + List stationList = initLines.get(lineName); + for (int i = 0; i < stationList.size(); i++) { + String stationName = stationList.get(i); + int order = i + ORDER_CONSTANT; + line.addStationByName(stationName, order); } + LineRepository.addLine(line); } -} +} \ No newline at end of file diff --git a/src/main/java/subway/domain/Line.java b/src/main/java/subway/domain/Line.java index f4d738d5a..037e0d81e 100644 --- a/src/main/java/subway/domain/Line.java +++ b/src/main/java/subway/domain/Line.java @@ -1,7 +1,13 @@ package subway.domain; +import java.util.ArrayList; +import java.util.List; + public class Line { + private static final int ORDER_CONSTANT = 1; + private String name; + private List stations = new ArrayList<>(); public Line(String name) { this.name = name; @@ -11,5 +17,17 @@ public String getName() { return name; } - // 추가 기능 구현 + private void addStation(Station station, int order) { + int indexOrder = order - ORDER_CONSTANT; + stations.add(indexOrder,station); + } + + public void addStationByName(String stationName, int order) { + for (int i = 0; i < StationRepository.stations().size(); i++) { + Station station = StationRepository.stations().get(i); + if (station.getName().equals(stationName)) { + addStation(station, order); + } + } + } } From 2edbd382b69b82186bc8869830ba8c86c563dc17 Mon Sep 17 00:00:00 2001 From: kmj990929 Date: Sat, 19 Dec 2020 16:31:04 +0900 Subject: [PATCH 16/19] =?UTF-8?q?feat:=20=EC=B4=88=EA=B8=B0=20=EA=B5=AC?= =?UTF-8?q?=EA=B0=84=20=EC=A0=95=EB=B3=B4=EB=A1=9C=20=EC=B4=88=EA=B8=B0=20?= =?UTF-8?q?=EC=84=A4=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/subway/controller/Initializer.java | 30 +++++++++++++++++++ src/main/java/subway/domain/Edge.java | 14 +++++++++ src/main/java/subway/domain/Line.java | 5 ++++ 3 files changed, 49 insertions(+) create mode 100644 src/main/java/subway/domain/Edge.java diff --git a/src/main/java/subway/controller/Initializer.java b/src/main/java/subway/controller/Initializer.java index 202eb43b9..a63ef652a 100644 --- a/src/main/java/subway/controller/Initializer.java +++ b/src/main/java/subway/controller/Initializer.java @@ -1,5 +1,6 @@ package subway.controller; +import subway.domain.Edge; import subway.domain.Station; import subway.domain.StationRepository; import subway.domain.Line; @@ -67,7 +68,36 @@ private static void makeLine(String lineName) { String stationName = stationList.get(i); int order = i + ORDER_CONSTANT; line.addStationByName(stationName, order); + makeEdgeInLine(line); } LineRepository.addLine(line); } + + private static void makeEdgeInLine(Line line) { + List edgeList = makeEdge(line); + for (int i = 0; i < edgeList.size(); i++) { + Edge edge = edgeList.get(i); + line.addEdge(edge,i); + } + } + + //자료형 사용해보자, 수정 필요 + private static List makeEdge(Line line) { + String lineName = line.getName(); + List edgeList = new ArrayList(); + if (lineName.equals(line1)) { + edgeList.add(new Edge(2,3)); + edgeList.add(new Edge(2,3)); + } + if (lineName.equals(line2)) { + edgeList.add(new Edge(3,2)); + edgeList.add(new Edge(6,5)); + edgeList.add(new Edge(1,1)); + } + if (lineName.equals(line3)) { + edgeList.add(new Edge(2,8)); + edgeList.add(new Edge(10,3)); + } + return edgeList; + } } \ No newline at end of file diff --git a/src/main/java/subway/domain/Edge.java b/src/main/java/subway/domain/Edge.java new file mode 100644 index 000000000..0c4d82f62 --- /dev/null +++ b/src/main/java/subway/domain/Edge.java @@ -0,0 +1,14 @@ +package subway.domain; + +public class Edge { + + private int distance; + private int time; + private final String distanceUnit = "km"; + private final String timeUnit = "분"; + + public Edge(int distance, int time) { + this.distance = distance; + this.time = time; + } +} diff --git a/src/main/java/subway/domain/Line.java b/src/main/java/subway/domain/Line.java index 037e0d81e..815d127ae 100644 --- a/src/main/java/subway/domain/Line.java +++ b/src/main/java/subway/domain/Line.java @@ -8,6 +8,7 @@ public class Line { private String name; private List stations = new ArrayList<>(); + private List edges = new ArrayList<>(); public Line(String name) { this.name = name; @@ -22,6 +23,10 @@ private void addStation(Station station, int order) { stations.add(indexOrder,station); } + public void addEdge(Edge edge, int order) { + edges.add(order,edge); + } + public void addStationByName(String stationName, int order) { for (int i = 0; i < StationRepository.stations().size(); i++) { Station station = StationRepository.stations().get(i); From b48ffe61b976e590758bab4f08dc41d94d736565 Mon Sep 17 00:00:00 2001 From: kmj990929 Date: Sat, 19 Dec 2020 16:48:08 +0900 Subject: [PATCH 17/19] =?UTF-8?q?feat:=20=EC=B6=9C=EB=B0=9C=EC=97=AD?= =?UTF-8?q?=EA=B3=BC=20=EB=8F=84=EC=B0=A9=EC=97=AD=20=EC=9E=85=EB=A0=A5=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 4 ++-- src/main/java/subway/Application.java | 2 +- src/main/java/subway/domain/Menus.java | 14 +++++++++++--- src/main/java/subway/view/InputView.java | 12 ++++++++++++ src/main/java/subway/view/OutputView.java | 10 ++++++++++ 5 files changed, 36 insertions(+), 6 deletions(-) diff --git a/docs/README.md b/docs/README.md index 19bf1903a..738b7a774 100644 --- a/docs/README.md +++ b/docs/README.md @@ -12,8 +12,8 @@ - [X] 돌아가기(B)를 선택하면 메인 화면으로 돌아간다. #### 경로 조회 -- [ ] 초기 노선 정보로 초기화한다. -- [ ] 출발역과 도착역을 입력한다. +- [X] 초기 노선 정보로 초기화한다. +- [X] 출발역과 도착역을 입력한다. - [ ] 출발역과 도착역 입력이 유효한지 검사한다. - [ ] 출발역과 도착역이 기존에 존재하는 역인지 확인한다. - [ ] 출발역과 도착역이 서로 다른지 확인한다. diff --git a/src/main/java/subway/Application.java b/src/main/java/subway/Application.java index f85e40299..c314d3458 100644 --- a/src/main/java/subway/Application.java +++ b/src/main/java/subway/Application.java @@ -20,7 +20,7 @@ private static void run(InputView inputView) { String selectedMenus = menuScanner.scanMenus(inputView); boolean quit = Menus.isQuit(selectedMenus); while (!quit) { - Menus.run(selectedMenus); + Menus.run(inputView, selectedMenus); selectedMenus = menuScanner.scanMenus(inputView); quit = Menus.isQuit(selectedMenus); } diff --git a/src/main/java/subway/domain/Menus.java b/src/main/java/subway/domain/Menus.java index 14ef006d0..13c66f2e2 100644 --- a/src/main/java/subway/domain/Menus.java +++ b/src/main/java/subway/domain/Menus.java @@ -1,8 +1,10 @@ package subway.domain; +import subway.domain.exception.NonExistentMenuException; +import subway.view.InputView; + import java.util.Arrays; import java.util.List; -import subway.domain.exception.NonExistentMenuException; public abstract class Menus { @@ -10,11 +12,17 @@ public abstract class Menus { public static final Criterions criterions = new Criterions(); private static final List signs = Arrays.asList(new String[]{}); - public static void run(String selectedCriterions) { + public static void run(InputView inputView, String selectedCriterions) { if (isBack(selectedCriterions)) { return; } - System.out.println("run"); + String start = inputView.scanStartStation(); + String end = inputView.scanEndStation(); + search(start, end); + } + + public static void search(String start, String end) { + } public static boolean isQuit(String sign) { diff --git a/src/main/java/subway/view/InputView.java b/src/main/java/subway/view/InputView.java index 11aea3e70..5c181bd90 100644 --- a/src/main/java/subway/view/InputView.java +++ b/src/main/java/subway/view/InputView.java @@ -1,5 +1,7 @@ package subway.view; +import java.util.Arrays; +import java.util.List; import java.util.Scanner; public class InputView { @@ -14,6 +16,16 @@ public String scanMenu() { return getInput(); } + public String scanStartStation() { + OutputView.printStartInputMessage(); + return getInput(); + } + + public String scanEndStation() { + OutputView.printEndInputMessage(); + return getInput(); + } + private String getInput() { return scanner.nextLine(); } diff --git a/src/main/java/subway/view/OutputView.java b/src/main/java/subway/view/OutputView.java index 32cbfb526..4ff208ed2 100644 --- a/src/main/java/subway/view/OutputView.java +++ b/src/main/java/subway/view/OutputView.java @@ -5,6 +5,8 @@ public class OutputView { private static final String MAIN_SCREEN = "\n## 메인 화면\n1. 경로 조회\nQ. 종료"; private static final String SUB_SCREEN = "\n## 경로 기준\n1. 최단 거리\n2. 최소 시간\nB. 돌아가기"; private static final String SELECT_MESSAGE = "\n## 원하는 기능을 선택하세요."; + private static final String START_STATION_INPUT_MESSAGE = "\n## 출발역을 입력하세요."; + private static final String END_STATION_INPUT_MESSAGE = "\n## 도착역을 입력하세요."; public static void printMainScreen() { System.out.println(MAIN_SCREEN); @@ -17,4 +19,12 @@ public static void printSubScreen() { public static void printSelectMessage() { System.out.println(SELECT_MESSAGE); } + + public static void printStartInputMessage() { + System.out.println(START_STATION_INPUT_MESSAGE); + } + + public static void printEndInputMessage() { + System.out.println(END_STATION_INPUT_MESSAGE); + } } From 8f073704c2f8e46a198f87fc90a86e0d12983e5d Mon Sep 17 00:00:00 2001 From: kmj990929 Date: Sat, 19 Dec 2020 17:07:15 +0900 Subject: [PATCH 18/19] =?UTF-8?q?feat:=20=EC=B6=9C=EB=B0=9C=EC=97=AD?= =?UTF-8?q?=EA=B3=BC=20=EB=8F=84=EC=B0=A9=EC=97=AD=20=EC=9C=A0=ED=9A=A8?= =?UTF-8?q?=EC=84=B1=20=EA=B2=80=EC=82=AC=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 6 +-- src/main/java/subway/domain/Menus.java | 42 +++++++++++++++++-- src/main/java/subway/domain/Station.java | 7 +++- .../java/subway/domain/StationRepository.java | 9 ++++ .../exception/NonExistentNameException.java | 9 ++++ .../domain/exception/SamePointsException.java | 9 ++++ 6 files changed, 74 insertions(+), 8 deletions(-) create mode 100644 src/main/java/subway/domain/exception/NonExistentNameException.java create mode 100644 src/main/java/subway/domain/exception/SamePointsException.java diff --git a/docs/README.md b/docs/README.md index 738b7a774..ca51f58a5 100644 --- a/docs/README.md +++ b/docs/README.md @@ -14,9 +14,9 @@ #### 경로 조회 - [X] 초기 노선 정보로 초기화한다. - [X] 출발역과 도착역을 입력한다. -- [ ] 출발역과 도착역 입력이 유효한지 검사한다. - - [ ] 출발역과 도착역이 기존에 존재하는 역인지 확인한다. - - [ ] 출발역과 도착역이 서로 다른지 확인한다. +- [X] 출발역과 도착역 입력이 유효한지 검사한다. + - [X] 출발역과 도착역이 기존에 존재하는 역인지 확인한다. + - [X] 출발역과 도착역이 서로 다른지 확인한다. - [ ] 두 역 사이의 (기준에 따른) 경로를 계산한다. - [ ] 두 역이 연결되어 있지 않은 경우 에러를 출력한다. - [ ] 조회 결과를 출력한다. diff --git a/src/main/java/subway/domain/Menus.java b/src/main/java/subway/domain/Menus.java index 13c66f2e2..5384a4b3c 100644 --- a/src/main/java/subway/domain/Menus.java +++ b/src/main/java/subway/domain/Menus.java @@ -1,6 +1,8 @@ package subway.domain; import subway.domain.exception.NonExistentMenuException; +import subway.domain.exception.NonExistentNameException; +import subway.domain.exception.SamePointsException; import subway.view.InputView; import java.util.Arrays; @@ -16,13 +18,45 @@ public static void run(InputView inputView, String selectedCriterions) { if (isBack(selectedCriterions)) { return; } - String start = inputView.scanStartStation(); - String end = inputView.scanEndStation(); - search(start, end); + search(inputView, selectedCriterions); } - public static void search(String start, String end) { + public static void search(InputView inputView, String criterion) { + List startStation, endStation = scanValidStations(inputView); + } + + private static List scanValidStations(InputView inputView) { + String start; + String end; + boolean validation = false; + do { + start = inputView.scanStartStation(); + end = inputView.scanEndStation(); + validation = isValidStations(start, end); + } while (!validation); + return Arrays.asList(start, end); + } + + private static boolean isValidStations(String start, String end) { + try { + checkValidationOfStations(start, end); + return true; + } catch (RuntimeException e) { + System.out.println(e.getMessage()); + return false; + } + } + private static void checkValidationOfStations(String start, String end) { + if (Station.isSameStation(start,end)) { + throw new SamePointsException(); + } + if (!StationRepository.isExistStationName(start)) { + throw new NonExistentNameException(); + } + if (!StationRepository.isExistStationName(end)) { + throw new NonExistentNameException(); + } } public static boolean isQuit(String sign) { diff --git a/src/main/java/subway/domain/Station.java b/src/main/java/subway/domain/Station.java index bdb142590..31fa50f0c 100644 --- a/src/main/java/subway/domain/Station.java +++ b/src/main/java/subway/domain/Station.java @@ -11,5 +11,10 @@ public String getName() { return name; } - // 추가 기능 구현 + public static boolean isSameStation(String start, String end) { + if (start.equals(end)) { + return true; + } + return false; + } } diff --git a/src/main/java/subway/domain/StationRepository.java b/src/main/java/subway/domain/StationRepository.java index 8ed9d103f..9aae9cdbc 100644 --- a/src/main/java/subway/domain/StationRepository.java +++ b/src/main/java/subway/domain/StationRepository.java @@ -23,4 +23,13 @@ public static boolean deleteStation(String name) { public static void deleteAll() { stations.clear(); } + + public static boolean isExistStationName(String name) { + for (int i = 0; i < stations.size(); i++) { + if (stations.get(i).getName().equals(name)) { + return true; + } + } + return false; + } } diff --git a/src/main/java/subway/domain/exception/NonExistentNameException.java b/src/main/java/subway/domain/exception/NonExistentNameException.java new file mode 100644 index 000000000..592fa847c --- /dev/null +++ b/src/main/java/subway/domain/exception/NonExistentNameException.java @@ -0,0 +1,9 @@ +package subway.domain.exception; + +public class NonExistentNameException extends RuntimeException { + private static final String NON_EXISTENT_NAME_ERROR_MESSAGE_START = "\n[ERROR] 존재하지 않는 역 이름입니다."; + + public NonExistentNameException() { + super(NON_EXISTENT_NAME_ERROR_MESSAGE_START); + } +} \ No newline at end of file diff --git a/src/main/java/subway/domain/exception/SamePointsException.java b/src/main/java/subway/domain/exception/SamePointsException.java new file mode 100644 index 000000000..fae0211d9 --- /dev/null +++ b/src/main/java/subway/domain/exception/SamePointsException.java @@ -0,0 +1,9 @@ +package subway.domain.exception; + +public class SamePointsException extends RuntimeException { + private static final String SAME_POINTS_ERROR_MESSAGE = "\n[ERROR] 출발역과 도착역이 동일합니다."; + + public SamePointsException() { + super(SAME_POINTS_ERROR_MESSAGE); + } +} \ No newline at end of file From 932a5b64c2b48a73a1e68c49629ac10df004f265 Mon Sep 17 00:00:00 2001 From: kmj990929 Date: Sat, 19 Dec 2020 17:59:00 +0900 Subject: [PATCH 19/19] =?UTF-8?q?feat:=20=EA=B7=B8=EB=9E=98=ED=94=84=20?= =?UTF-8?q?=EA=B7=B8=EB=A6=AC=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/Application.java | 5 +-- .../java/subway/controller/Initializer.java | 23 +++++++----- .../java/subway/controller/Navigator.java | 36 +++++++++++++++++++ src/main/java/subway/domain/Criterions.java | 14 ++++++++ src/main/java/subway/domain/Edge.java | 8 ++--- src/main/java/subway/domain/Line.java | 8 +++++ src/main/java/subway/domain/Menus.java | 15 +++++--- 7 files changed, 91 insertions(+), 18 deletions(-) create mode 100644 src/main/java/subway/controller/Navigator.java diff --git a/src/main/java/subway/Application.java b/src/main/java/subway/Application.java index c314d3458..19dd1b63b 100644 --- a/src/main/java/subway/Application.java +++ b/src/main/java/subway/Application.java @@ -2,6 +2,7 @@ import subway.controller.Initializer; import subway.controller.MenuScanner; +import subway.controller.Navigator; import subway.domain.Menus; import subway.view.InputView; @@ -15,12 +16,12 @@ public static void main(String[] args) { } private static void run(InputView inputView) { - Initializer.set(); + Navigator navigator = Initializer.set(); MenuScanner menuScanner = new MenuScanner(); String selectedMenus = menuScanner.scanMenus(inputView); boolean quit = Menus.isQuit(selectedMenus); while (!quit) { - Menus.run(inputView, selectedMenus); + Menus.run(inputView, selectedMenus, navigator); selectedMenus = menuScanner.scanMenus(inputView); quit = Menus.isQuit(selectedMenus); } diff --git a/src/main/java/subway/controller/Initializer.java b/src/main/java/subway/controller/Initializer.java index a63ef652a..511c2e682 100644 --- a/src/main/java/subway/controller/Initializer.java +++ b/src/main/java/subway/controller/Initializer.java @@ -1,5 +1,6 @@ package subway.controller; +import subway.controller.Navigator; import subway.domain.Edge; import subway.domain.Station; import subway.domain.StationRepository; @@ -12,6 +13,7 @@ import java.util.List; public class Initializer { + private static final int NEXT_CONSTANT = 1; private static final int ORDER_CONSTANT = 1; private static final String station1 = "교대역"; @@ -41,43 +43,48 @@ public class Initializer { private Initializer() { } - public static void set() { - HashMap stations = makeStations(); + public static Navigator set() { + Navigator navigator = new Navigator(); + HashMap stations = makeStations(navigator); List lineNameList = new ArrayList(initLines.keySet()); for (int i = 0; i < lineNameList.size(); i++) { String lineName = lineNameList.get(i); - makeLine(lineName); + makeLine(lineName, navigator); } + return navigator; } - private static HashMap makeStations() { + private static HashMap makeStations(Navigator navigator) { HashMap stations = new HashMap(); for (int i = 0; i < initStations.size(); i++) { String stationName = initStations.get(i); Station station = new Station(stationName); StationRepository.addStation(station); stations.put(stationName, station); + navigator.addStation(stationName); } return stations; } - private static void makeLine(String lineName) { + private static void makeLine(String lineName, Navigator navigator) { Line line = new Line(lineName); List stationList = initLines.get(lineName); for (int i = 0; i < stationList.size(); i++) { String stationName = stationList.get(i); int order = i + ORDER_CONSTANT; line.addStationByName(stationName, order); - makeEdgeInLine(line); + makeEdgeInLine(line, navigator); } LineRepository.addLine(line); } - private static void makeEdgeInLine(Line line) { + private static void makeEdgeInLine(Line line, Navigator navigator) { List edgeList = makeEdge(line); + List stationNameList = line.getStationNameList(); for (int i = 0; i < edgeList.size(); i++) { Edge edge = edgeList.get(i); - line.addEdge(edge,i); + //line.addEdge(edge,i); + //navigator.addEdge(stationNameList.get(i), stationNameList.get(i+NEXT_CONSTANT),edge); } } diff --git a/src/main/java/subway/controller/Navigator.java b/src/main/java/subway/controller/Navigator.java new file mode 100644 index 000000000..8d50815b8 --- /dev/null +++ b/src/main/java/subway/controller/Navigator.java @@ -0,0 +1,36 @@ +package subway.controller; + +import subway.domain.Edge; + +import java.util.List; +import org.jgrapht.graph.WeightedMultigraph; +import org.jgrapht.graph.DefaultWeightedEdge; + +public class Navigator { + + public WeightedMultigraph distanceGraph; + public WeightedMultigraph timeGraph; + + public Navigator() { + this.distanceGraph = new WeightedMultigraph(DefaultWeightedEdge.class); + this.timeGraph = new WeightedMultigraph(DefaultWeightedEdge.class); + } + + public void addStation(String stationName) { + distanceGraph.addVertex(stationName); + timeGraph.addVertex(stationName); + } + + public void addEdge(String startStation, String endStation, Edge edge) { + distanceGraph.setEdgeWeight(distanceGraph.addEdge(startStation, endStation), edge.distance); + timeGraph.setEdgeWeight(timeGraph.addEdge(startStation, endStation), edge.time); + } + + public List searchShortestDistance(List stations) { + return stations; + } + + public List searchShortestTime(List stations) { + return stations; + } +} diff --git a/src/main/java/subway/domain/Criterions.java b/src/main/java/subway/domain/Criterions.java index cabaa0e0a..7ac5887d6 100644 --- a/src/main/java/subway/domain/Criterions.java +++ b/src/main/java/subway/domain/Criterions.java @@ -25,4 +25,18 @@ public static boolean isBack(String sign) { } return false; } + + public boolean isDistanceSign(String sign) { + if (sign.equals(distanceSign)) { + return true; + } + return false; + } + + public boolean isTimeSign(String sign) { + if (sign.equals(timeSign)) { + return true; + } + return false; + } } diff --git a/src/main/java/subway/domain/Edge.java b/src/main/java/subway/domain/Edge.java index 0c4d82f62..5da628161 100644 --- a/src/main/java/subway/domain/Edge.java +++ b/src/main/java/subway/domain/Edge.java @@ -2,10 +2,10 @@ public class Edge { - private int distance; - private int time; - private final String distanceUnit = "km"; - private final String timeUnit = "분"; + public int distance; + public int time; + public final String distanceUnit = "km"; + public final String timeUnit = "분"; public Edge(int distance, int time) { this.distance = distance; diff --git a/src/main/java/subway/domain/Line.java b/src/main/java/subway/domain/Line.java index 815d127ae..417a988a5 100644 --- a/src/main/java/subway/domain/Line.java +++ b/src/main/java/subway/domain/Line.java @@ -35,4 +35,12 @@ public void addStationByName(String stationName, int order) { } } } + + public List getStationNameList() { + List stationList = new ArrayList(); + for (int i = 0; i < stations.size(); i++) { + stationList.add(stations.get(i).getName()); + } + return stationList; + } } diff --git a/src/main/java/subway/domain/Menus.java b/src/main/java/subway/domain/Menus.java index 5384a4b3c..46400cc79 100644 --- a/src/main/java/subway/domain/Menus.java +++ b/src/main/java/subway/domain/Menus.java @@ -1,5 +1,6 @@ package subway.domain; +import subway.controller.Navigator; import subway.domain.exception.NonExistentMenuException; import subway.domain.exception.NonExistentNameException; import subway.domain.exception.SamePointsException; @@ -14,15 +15,21 @@ public abstract class Menus { public static final Criterions criterions = new Criterions(); private static final List signs = Arrays.asList(new String[]{}); - public static void run(InputView inputView, String selectedCriterions) { + public static void run(InputView inputView, String selectedCriterions, Navigator navigator) { if (isBack(selectedCriterions)) { return; } - search(inputView, selectedCriterions); + search(inputView, selectedCriterions, navigator); } - public static void search(InputView inputView, String criterion) { - List startStation, endStation = scanValidStations(inputView); + public static void search(InputView inputView, String criterion, Navigator navigator) { + List stations = scanValidStations(inputView); + if (criterions.isDistanceSign(criterion)) { + navigator.searchShortestDistance(stations); + } + if (criterions.isTimeSign(criterion)) { + navigator.searchShortestTime(stations); + } } private static List scanValidStations(InputView inputView) {