From dbf4654f03b72a094b4c84b855c9c4b02fe6f86c Mon Sep 17 00:00:00 2001 From: rootTiket Date: Sat, 13 Apr 2024 16:49:40 +0900 Subject: [PATCH 01/13] =?UTF-8?q?[feat]=20:=20=EB=B2=84=EC=A0=84=20?= =?UTF-8?q?=EC=9E=85=EB=A0=A5=20=EA=B5=AC=ED=98=84=201.=20=EB=B2=84?= =?UTF-8?q?=EC=A0=84=EC=9D=84=20=EC=9E=85=EB=A0=A5=ED=95=98=EB=8A=94=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84=202.=20=EC=9E=85?= =?UTF-8?q?=EB=A0=A5=ED=83=80=EC=9E=85=EC=9D=B4=20=EB=A7=9E=EC=A7=80=20?= =?UTF-8?q?=EC=95=8A=EC=9D=84=EA=B2=BD=EC=9A=B0=20=EC=98=88=EC=99=B8?= =?UTF-8?q?=EC=B2=98=EB=A6=AC=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/leets/land/Controller.java | 11 ++++++++ src/main/java/leets/land/InputView.java | 28 +++++++++++++++++++ src/main/java/leets/land/Up.java | 5 ++++ .../java/leets/land/UpdownApplication.java | 4 +-- 4 files changed, 46 insertions(+), 2 deletions(-) create mode 100644 src/main/java/leets/land/Controller.java create mode 100644 src/main/java/leets/land/InputView.java create mode 100644 src/main/java/leets/land/Up.java diff --git a/src/main/java/leets/land/Controller.java b/src/main/java/leets/land/Controller.java new file mode 100644 index 0000000..50461d9 --- /dev/null +++ b/src/main/java/leets/land/Controller.java @@ -0,0 +1,11 @@ +package leets.land; + +public class Controller { + private final InputView inputView = new InputView(); + public void run() { + int version = inputView.versionInput(); + } + public void numberVersion() { + int number = inputView.readNumber(); + } +} diff --git a/src/main/java/leets/land/InputView.java b/src/main/java/leets/land/InputView.java new file mode 100644 index 0000000..a4570d8 --- /dev/null +++ b/src/main/java/leets/land/InputView.java @@ -0,0 +1,28 @@ +package leets.land; + +import java.util.Scanner; + +public class InputView { + private final Scanner sc = new Scanner(System.in); + + public int versionInput() { + System.out.print("버전을 입력해주세요 (숫자 버전: 1, 영어 버전: 2) : "); + String version = sc.next(); + return validateNumberType(version); + } + + public int readNumber() { + System.out.println("숫자를 입력해주세요(1 ~ 100) : "); + String number = sc.next(); + return validateNumberType(number); + } + + public int validateNumberType(String number) { + try { + return Integer.parseInt(number); + } catch (NumberFormatException e) { + System.out.println("[ERROR] 입력 문자의 타입이 맞지 않습니다."); + return versionInput(); + } + } +} diff --git a/src/main/java/leets/land/Up.java b/src/main/java/leets/land/Up.java new file mode 100644 index 0000000..076038a --- /dev/null +++ b/src/main/java/leets/land/Up.java @@ -0,0 +1,5 @@ +package leets.land; + +public class Up { + +} diff --git a/src/main/java/leets/land/UpdownApplication.java b/src/main/java/leets/land/UpdownApplication.java index 09d7ae5..981c4ee 100644 --- a/src/main/java/leets/land/UpdownApplication.java +++ b/src/main/java/leets/land/UpdownApplication.java @@ -1,8 +1,8 @@ package leets.land; public class UpdownApplication { - public static void main(String[] args) { - System.out.print("hihi :D"); + Controller controller = new Controller(); + controller.run(); } } From aaee92723e512d9bb96989a9b4af980bb142d9b1 Mon Sep 17 00:00:00 2001 From: rootTiket Date: Sat, 13 Apr 2024 17:05:54 +0900 Subject: [PATCH 02/13] =?UTF-8?q?[feat]=20:=20=EC=98=81=EC=96=B4=20?= =?UTF-8?q?=EC=9E=85=EB=A0=A5=EC=9D=84=20=EB=B0=9B=EB=8A=94=20=EA=B8=B0?= =?UTF-8?q?=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 --- src/main/java/leets/land/Controller.java | 8 ++++++++ src/main/java/leets/land/InputView.java | 24 +++++++++++++++++++++++- 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/src/main/java/leets/land/Controller.java b/src/main/java/leets/land/Controller.java index 50461d9..602942f 100644 --- a/src/main/java/leets/land/Controller.java +++ b/src/main/java/leets/land/Controller.java @@ -4,8 +4,16 @@ public class Controller { private final InputView inputView = new InputView(); public void run() { int version = inputView.versionInput(); + if (version == 1) { + numberVersion(); + } else { + alphaVersion(); + } } public void numberVersion() { int number = inputView.readNumber(); } + public void alphaVersion() { + String alpha = inputView.readString(); + } } diff --git a/src/main/java/leets/land/InputView.java b/src/main/java/leets/land/InputView.java index a4570d8..9a548c1 100644 --- a/src/main/java/leets/land/InputView.java +++ b/src/main/java/leets/land/InputView.java @@ -12,11 +12,31 @@ public int versionInput() { } public int readNumber() { - System.out.println("숫자를 입력해주세요(1 ~ 100) : "); + System.out.print("숫자를 입력해주세요(1 ~ 100) : "); String number = sc.next(); return validateNumberType(number); } + public String readString() { + System.out.print("영어를 입력해주세요(A ~ z) : "); + String alpha = sc.next(); + return validateAlpha(alpha); + } + + public String validateAlpha(String alpha) { + if (alpha.length() >= 2) { + System.out.println("[ERROR] 입력 문자의 길이는 1을 넘을 수 없습니다."); + return readString(); + } + for (char c : alpha.toCharArray()) { + if (!Character.isAlphabetic(c)) { + System.out.println("[ERROR] 입력 문자의 타입이 맞지 않습니다."); + return readString(); + } + } + return alpha; + } + public int validateNumberType(String number) { try { return Integer.parseInt(number); @@ -25,4 +45,6 @@ public int validateNumberType(String number) { return versionInput(); } } + + } From 4e607b000fbfc41526092abf51fea90a50845db4 Mon Sep 17 00:00:00 2001 From: rootTiket Date: Sat, 13 Apr 2024 17:54:35 +0900 Subject: [PATCH 03/13] =?UTF-8?q?[feat]=20:=20=EC=88=AB=EC=9E=90=20?= =?UTF-8?q?=EB=9E=9C=EB=8D=A4=20=EB=BD=91=EA=B8=B0=20=EA=B8=B0=EB=8A=A5=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84=201.=20=EB=9E=9C=EB=8D=A4=EC=9C=BC=EB=A1=9C?= =?UTF-8?q?=20=EC=88=AB=EC=9E=90=EB=A5=BC=20=EB=BD=91=EB=8A=94=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5=20=EC=B6=94=EA=B0=80=202.=20=EC=98=AC=EB=B0=94?= =?UTF-8?q?=EB=A5=B4=EC=A7=80=20=EC=95=8A=EC=9D=80=20=ED=83=80=EC=9E=85?= =?UTF-8?q?=EC=9D=98=20=EC=9E=85=EB=A0=A5=EC=9D=BC=20=EB=95=8C=20=EC=98=88?= =?UTF-8?q?=EC=99=B8=EB=A5=BC=20=EC=B6=9C=EB=A0=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/leets/land/Controller.java | 26 ++++++++++++++++++- src/main/java/leets/land/Up.java | 5 ---- src/main/java/leets/land/UpNumberVersion.java | 12 +++++++++ .../java/leets/land/{ => view}/InputView.java | 22 ++++++++++++++-- 4 files changed, 57 insertions(+), 8 deletions(-) delete mode 100644 src/main/java/leets/land/Up.java create mode 100644 src/main/java/leets/land/UpNumberVersion.java rename src/main/java/leets/land/{ => view}/InputView.java (69%) diff --git a/src/main/java/leets/land/Controller.java b/src/main/java/leets/land/Controller.java index 602942f..3ad6bd9 100644 --- a/src/main/java/leets/land/Controller.java +++ b/src/main/java/leets/land/Controller.java @@ -1,7 +1,13 @@ package leets.land; +import leets.land.view.InputView; +import leets.land.view.OutputView; + +import java.util.Random; + public class Controller { private final InputView inputView = new InputView(); + private final OutputView outputView = new OutputView(); public void run() { int version = inputView.versionInput(); if (version == 1) { @@ -11,8 +17,26 @@ public void run() { } } public void numberVersion() { - int number = inputView.readNumber(); + double randomValue = Math.random(); + int randomNumber = (int)(randomValue *100) +1; + System.out.println(randomNumber); + int cnt = 0; + int correct = -1; + while (correct != randomNumber) { + correct = inputView.readNumber(); + printUpDown(correct, randomNumber); + cnt ++; + } + outputView.printCorrectMessage(cnt); } + public void printUpDown(int number, int randomNumber) { + if (number < randomNumber) { + System.out.println("UP"); + } else if(number > randomNumber) { + System.out.println("Down"); + } + } + public void alphaVersion() { String alpha = inputView.readString(); } diff --git a/src/main/java/leets/land/Up.java b/src/main/java/leets/land/Up.java deleted file mode 100644 index 076038a..0000000 --- a/src/main/java/leets/land/Up.java +++ /dev/null @@ -1,5 +0,0 @@ -package leets.land; - -public class Up { - -} diff --git a/src/main/java/leets/land/UpNumberVersion.java b/src/main/java/leets/land/UpNumberVersion.java new file mode 100644 index 0000000..9d5a8cf --- /dev/null +++ b/src/main/java/leets/land/UpNumberVersion.java @@ -0,0 +1,12 @@ +package leets.land; + +import java.util.Random; + +public class UpNumberVersion { + + public void validateUpDownValue(int number) { + if (number < 1) { + System.out.println("1 이상의 숫자만 입력해주세요"); + } + } +} diff --git a/src/main/java/leets/land/InputView.java b/src/main/java/leets/land/view/InputView.java similarity index 69% rename from src/main/java/leets/land/InputView.java rename to src/main/java/leets/land/view/InputView.java index 9a548c1..b6dcb96 100644 --- a/src/main/java/leets/land/InputView.java +++ b/src/main/java/leets/land/view/InputView.java @@ -1,4 +1,4 @@ -package leets.land; +package leets.land.view; import java.util.Scanner; @@ -14,7 +14,25 @@ public int versionInput() { public int readNumber() { System.out.print("숫자를 입력해주세요(1 ~ 100) : "); String number = sc.next(); - return validateNumberType(number); + return checkNumberRange(checkNumberType(number)); + } + + public int checkNumberRange(int number) { + if (number < 1) { + System.out.println("[ERROR] 범위 내의 숫자를 입력하세요. "); + return readNumber(); + } else { + return number; + } + } + + public int checkNumberType(String number) { + try { + return Integer.parseInt(number); + } catch (NumberFormatException e) { + System.out.println("[ERROR] 입력 문자의 타입이 맞지 않습니다."); + return readNumber(); + } } public String readString() { From d9f9292a98fbe0e6a010a95393f53a31e478434e Mon Sep 17 00:00:00 2001 From: rootTiket Date: Sat, 13 Apr 2024 17:55:22 +0900 Subject: [PATCH 04/13] =?UTF-8?q?[feat]=20:=20=EC=A0=95=EB=8B=B5=EC=9D=BC?= =?UTF-8?q?=EB=95=8C=20=EC=8B=9C=EB=8F=84=ED=9A=9F=EC=88=98=EB=A5=BC=20?= =?UTF-8?q?=EC=B6=9C=EB=A0=A5=ED=95=98=EB=8A=94=20=ED=95=A8=EC=88=98=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/leets/land/view/OutputView.java | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 src/main/java/leets/land/view/OutputView.java diff --git a/src/main/java/leets/land/view/OutputView.java b/src/main/java/leets/land/view/OutputView.java new file mode 100644 index 0000000..5fe5227 --- /dev/null +++ b/src/main/java/leets/land/view/OutputView.java @@ -0,0 +1,9 @@ +package leets.land.view; + +public class OutputView { + public void printCorrectMessage(int cnt) { + System.out.println("정답"); + + System.out.printf("시도한 횟수 : %d회",cnt); + } +} From 17e5e8b0286f90a099cae8378e1b756abe825a20 Mon Sep 17 00:00:00 2001 From: rootTiket Date: Sat, 13 Apr 2024 17:59:15 +0900 Subject: [PATCH 05/13] =?UTF-8?q?[fix]=20:=20101=EC=9D=84=20=EC=9E=85?= =?UTF-8?q?=EB=A0=A5=EB=B0=9B=EC=95=98=EC=9D=84=20=EB=95=8C=20=EC=9E=85?= =?UTF-8?q?=EB=A0=A5=EC=9D=B4=20=EB=90=98=EB=8A=94=20=ED=98=84=EC=83=81=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/leets/land/view/InputView.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/leets/land/view/InputView.java b/src/main/java/leets/land/view/InputView.java index b6dcb96..bc48f73 100644 --- a/src/main/java/leets/land/view/InputView.java +++ b/src/main/java/leets/land/view/InputView.java @@ -18,7 +18,7 @@ public int readNumber() { } public int checkNumberRange(int number) { - if (number < 1) { + if (number < 1 || number >100) { System.out.println("[ERROR] 범위 내의 숫자를 입력하세요. "); return readNumber(); } else { From 161c13bbef4cf84004149487db59b30487452409 Mon Sep 17 00:00:00 2001 From: rootTiket Date: Sat, 13 Apr 2024 18:01:22 +0900 Subject: [PATCH 06/13] =?UTF-8?q?[refactor]=20:=20=ED=81=B4=EB=9E=98?= =?UTF-8?q?=EC=8A=A4=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/leets/land/Controller.java | 10 ++-------- src/main/java/leets/land/UpNumberVersion.java | 8 +++++--- 2 files changed, 7 insertions(+), 11 deletions(-) diff --git a/src/main/java/leets/land/Controller.java b/src/main/java/leets/land/Controller.java index 3ad6bd9..02ee08e 100644 --- a/src/main/java/leets/land/Controller.java +++ b/src/main/java/leets/land/Controller.java @@ -8,6 +8,7 @@ public class Controller { private final InputView inputView = new InputView(); private final OutputView outputView = new OutputView(); + private final UpNumberVersion upNumberVersion = new UpNumberVersion(); public void run() { int version = inputView.versionInput(); if (version == 1) { @@ -24,18 +25,11 @@ public void numberVersion() { int correct = -1; while (correct != randomNumber) { correct = inputView.readNumber(); - printUpDown(correct, randomNumber); + upNumberVersion.printUpDown(correct, randomNumber); cnt ++; } outputView.printCorrectMessage(cnt); } - public void printUpDown(int number, int randomNumber) { - if (number < randomNumber) { - System.out.println("UP"); - } else if(number > randomNumber) { - System.out.println("Down"); - } - } public void alphaVersion() { String alpha = inputView.readString(); diff --git a/src/main/java/leets/land/UpNumberVersion.java b/src/main/java/leets/land/UpNumberVersion.java index 9d5a8cf..87239b5 100644 --- a/src/main/java/leets/land/UpNumberVersion.java +++ b/src/main/java/leets/land/UpNumberVersion.java @@ -4,9 +4,11 @@ public class UpNumberVersion { - public void validateUpDownValue(int number) { - if (number < 1) { - System.out.println("1 이상의 숫자만 입력해주세요"); + public void printUpDown(int number, int randomNumber) { + if (number < randomNumber) { + System.out.println("UP"); + } else if(number > randomNumber) { + System.out.println("Down"); } } } From 3f5ec6414096d50854e32a71aacc7c0110283574 Mon Sep 17 00:00:00 2001 From: rootTiket Date: Sat, 13 Apr 2024 18:43:55 +0900 Subject: [PATCH 07/13] =?UTF-8?q?[feat]:=20=EC=98=81=EC=96=B4=20=EB=9E=9C?= =?UTF-8?q?=EB=8D=A4=20=EB=BD=91=EA=B8=B0=20=EA=B5=AC=ED=98=84=201.=20?= =?UTF-8?q?=EB=9E=9C=EB=8D=A4=20=EC=95=8C=ED=8C=8C=EB=B2=B3=EC=9D=84=20?= =?UTF-8?q?=EB=BD=91=EA=B3=A0=20=EC=82=AC=EC=9A=A9=EC=9E=90=EC=9D=98=20?= =?UTF-8?q?=EC=9E=85=EB=A0=A5=EA=B3=BC=20=EC=9D=BC=EC=B9=98=ED=95=9C?= =?UTF-8?q?=EC=A7=80=20=ED=99=95=EC=9D=B8=ED=95=98=EB=8A=94=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5=20=EC=B6=94=EA=B0=80=202.=20=EC=82=AC=EC=9A=A9?= =?UTF-8?q?=EC=9E=90=EC=9D=98=20=EC=9E=85=EB=A0=A5=EC=97=90=20=EB=94=B0?= =?UTF-8?q?=EB=9D=BC=20=EC=9E=85=EB=A0=A5=20=EB=AC=B8=EA=B5=AC=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD=ED=95=98=EB=8A=94=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/leets/land/Controller.java | 19 ++++++++++++++++ src/main/java/leets/land/view/InputView.java | 23 ++++++++++++++++++++ 2 files changed, 42 insertions(+) diff --git a/src/main/java/leets/land/Controller.java b/src/main/java/leets/land/Controller.java index 02ee08e..22de40a 100644 --- a/src/main/java/leets/land/Controller.java +++ b/src/main/java/leets/land/Controller.java @@ -33,5 +33,24 @@ public void numberVersion() { public void alphaVersion() { String alpha = inputView.readString(); + if (Character.isUpperCase(alpha.charAt(0))) { + char randomAlpha = (char)((Math.random() * 26) + 65); + System.out.println(randomAlpha); + int cnt = 1; + char correct = alpha.charAt(0); + while (correct != randomAlpha) { + correct = inputView.readUpperAlpha(correct); + printUpDown(correct, randomAlpha); + cnt ++; + } + outputView.printCorrectMessage(cnt); + } + } + public void printUpDown(char correct, char randomAlpha) { + if (correct < randomAlpha) { + System.out.println("UP"); + } else if(correct > randomAlpha) { + System.out.println("Down"); + } } } diff --git a/src/main/java/leets/land/view/InputView.java b/src/main/java/leets/land/view/InputView.java index bc48f73..286ba70 100644 --- a/src/main/java/leets/land/view/InputView.java +++ b/src/main/java/leets/land/view/InputView.java @@ -41,6 +41,29 @@ public String readString() { return validateAlpha(alpha); } + public char readUpperAlpha() { + System.out.print("영어를 입력해주세요(A ~ Z) : "); + String alpha = sc.next(); + char UpperAlpha = validateAlpha(alpha).charAt(0); + if(UpperAlpha < 'A' || validateAlpha(alpha).charAt(0) > 'Z'){ + System.out.println("[ERROR]: 범위 내의 알파벳을 입력하세요."); + return readUpperAlpha(); + } + return UpperAlpha; + } + + public char readUpperAlpha(char c) { + char start = (char)(c + 1); + System.out.printf("영어를 입력해주세요(%c ~ Z) : ",start); + String alpha = sc.next(); + char UpperAlpha = validateAlpha(alpha).charAt(0); + if(UpperAlpha < 'A' || validateAlpha(alpha).charAt(0) > 'Z'){ + System.out.println("[ERROR]: 범위 내의 알파벳을 입력하세요."); + return readUpperAlpha(); + } + return UpperAlpha; + } + public String validateAlpha(String alpha) { if (alpha.length() >= 2) { System.out.println("[ERROR] 입력 문자의 길이는 1을 넘을 수 없습니다."); From 8c2c29201018eefb5431775da37f6b57bd8ec9ad Mon Sep 17 00:00:00 2001 From: rootTiket Date: Sun, 14 Apr 2024 15:33:16 +0900 Subject: [PATCH 08/13] =?UTF-8?q?[fix]:=20=EC=88=AB=EC=9E=90=EB=A5=BC=20?= =?UTF-8?q?=EC=9E=85=EB=A0=A5=ED=95=B4=EB=8F=84=20=EC=B6=9C=EB=A0=A5=20?= =?UTF-8?q?=EB=B2=94=EC=9C=84=EA=B0=80=20=EB=B0=94=EB=80=8C=EC=A7=80=20?= =?UTF-8?q?=EC=95=8A=EB=8A=94=20=ED=98=84=EC=83=81=20=EC=88=98=EC=A0=95=20?= =?UTF-8?q?1.=20=EC=B6=9C=EB=A0=A5=EB=B2=94=EC=9C=84=EA=B0=80=20=EC=A0=95?= =?UTF-8?q?=EC=83=81=EC=A0=81=EC=9C=BC=EB=A1=9C=20=EC=B6=9C=EB=A0=A5?= =?UTF-8?q?=EB=90=98=EB=8F=84=EB=A1=9D=20=EC=88=98=EC=A0=95=202.=20?= =?UTF-8?q?=EB=B2=94=EC=9C=84=EB=A5=BC=20=EA=B4=80=EB=A6=AC=ED=95=98?= =?UTF-8?q?=EB=8A=94=20range=20=ED=81=B4=EB=9E=98=EC=8A=A4=20=EB=B6=84?= =?UTF-8?q?=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 35 ++++++++- src/main/java/leets/land/Controller.java | 23 +++--- src/main/java/leets/land/Range.java | 27 +++++++ src/main/java/leets/land/UpNumberVersion.java | 1 - src/main/java/leets/land/view/InputView.java | 74 +++++++++++-------- 5 files changed, 119 insertions(+), 41 deletions(-) create mode 100644 src/main/java/leets/land/Range.java diff --git a/README.md b/README.md index ae3710b..09a6905 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,37 @@ -# 👆 업다운 +public int readNumber(int min, int max) { + System.out.printf("숫자를 입력해주세요(%d ~ %d) : ", min, max); + String number = sc.next(); + return checkNumberRange(checkNumberType(number), min, max); +} + +public int checkNumberRange(int number, int min, int max) { + if (number < min || number > max) { + System.out.println("[ERROR] 범위 내의 숫자를 입력하세요. "); + return readNumber(min, max); + } else { + return number; + } +}public void numberVersion() { + double randomValue = Math.random(); + int randomNumber = (int)(randomValue *100) +1; + System.out.println(randomNumber); + int cnt = 0; + int correct = -1; + int min = 1; + int max = 100; + while (correct != randomNumber) { + correct = inputView.readNumber(min, max); + if (correct < randomNumber) { + System.out.println("UP"); + min = correct + 1; + } else if (correct > randomNumber) { + System.out.println("DOWN"); + max = correct - 1; + } + cnt ++; + } + outputView.printCorrectMessage(cnt); +}# 👆 업다운
diff --git a/src/main/java/leets/land/Controller.java b/src/main/java/leets/land/Controller.java index 22de40a..c8f557f 100644 --- a/src/main/java/leets/land/Controller.java +++ b/src/main/java/leets/land/Controller.java @@ -3,8 +3,6 @@ import leets.land.view.InputView; import leets.land.view.OutputView; -import java.util.Random; - public class Controller { private final InputView inputView = new InputView(); private final OutputView outputView = new OutputView(); @@ -23,26 +21,31 @@ public void numberVersion() { System.out.println(randomNumber); int cnt = 0; int correct = -1; + Range range = new Range(1, 100); while (correct != randomNumber) { - correct = inputView.readNumber(); - upNumberVersion.printUpDown(correct, randomNumber); + correct = inputView.readNumber(range); + if (correct < randomNumber) { + System.out.println("UP"); + range.setMin(correct + 1); + } else if (correct > randomNumber) { + System.out.println("DOWN"); + range.setMax(correct - 1); + } cnt ++; } outputView.printCorrectMessage(cnt); } public void alphaVersion() { - String alpha = inputView.readString(); - if (Character.isUpperCase(alpha.charAt(0))) { + char alpha = inputView.readAlpha(); char randomAlpha = (char)((Math.random() * 26) + 65); System.out.println(randomAlpha); - int cnt = 1; - char correct = alpha.charAt(0); + int cnt = 0; + char correct = alpha; while (correct != randomAlpha) { - correct = inputView.readUpperAlpha(correct); + correct = inputView.readAlpha(correct); printUpDown(correct, randomAlpha); cnt ++; - } outputView.printCorrectMessage(cnt); } } diff --git a/src/main/java/leets/land/Range.java b/src/main/java/leets/land/Range.java new file mode 100644 index 0000000..1787536 --- /dev/null +++ b/src/main/java/leets/land/Range.java @@ -0,0 +1,27 @@ +package leets.land; + +public class Range { + private int min; + private int max; + + public Range(int min, int max) { + this.min = min; + this.max = max; + } + + public int getMin() { + return min; + } + + public int getMax() { + return max; + } + + public void setMin(int min) { + this.min = min; + } + + public void setMax(int max) { + this.max = max; + } +} diff --git a/src/main/java/leets/land/UpNumberVersion.java b/src/main/java/leets/land/UpNumberVersion.java index 87239b5..5785376 100644 --- a/src/main/java/leets/land/UpNumberVersion.java +++ b/src/main/java/leets/land/UpNumberVersion.java @@ -1,6 +1,5 @@ package leets.land; -import java.util.Random; public class UpNumberVersion { diff --git a/src/main/java/leets/land/view/InputView.java b/src/main/java/leets/land/view/InputView.java index 286ba70..46f8b45 100644 --- a/src/main/java/leets/land/view/InputView.java +++ b/src/main/java/leets/land/view/InputView.java @@ -1,26 +1,36 @@ package leets.land.view; +import leets.land.Range; + import java.util.Scanner; public class InputView { private final Scanner sc = new Scanner(System.in); - public int versionInput() { System.out.print("버전을 입력해주세요 (숫자 버전: 1, 영어 버전: 2) : "); String version = sc.next(); return validateNumberType(version); } - public int readNumber() { - System.out.print("숫자를 입력해주세요(1 ~ 100) : "); + public int readNumber(int min, int max) { + System.out.printf("숫자를 입력해주세요(%d ~ %d) : ", min, max); String number = sc.next(); - return checkNumberRange(checkNumberType(number)); + return checkNumberRange(checkNumberType(number), min, max); } - public int checkNumberRange(int number) { - if (number < 1 || number >100) { + public int checkNumberRange(int number, int min, int max) { + if (number < min || number > max) { System.out.println("[ERROR] 범위 내의 숫자를 입력하세요. "); - return readNumber(); + return readNumber(min, max); + } else { + return number; + } + } + + public int checkNumberRange(int number, Range range) { + if (number < range.getMin() || number > range.getMax()) { + System.out.println("[ERROR] 범위 내의 숫자를 입력하세요. "); + return readNumber(range); } else { return number; } @@ -31,53 +41,59 @@ public int checkNumberType(String number) { return Integer.parseInt(number); } catch (NumberFormatException e) { System.out.println("[ERROR] 입력 문자의 타입이 맞지 않습니다."); - return readNumber(); + return readNumber(1, 100); } } - public String readString() { - System.out.print("영어를 입력해주세요(A ~ z) : "); - String alpha = sc.next(); - return validateAlpha(alpha); + public int readNumber(Range range) { + System.out.printf("숫자를 입력해주세요(%d ~ %d) : ", range.getMin(), range.getMax()); + String number = sc.next(); + return checkNumberRange(checkNumberType(number, range), range); } - public char readUpperAlpha() { - System.out.print("영어를 입력해주세요(A ~ Z) : "); - String alpha = sc.next(); - char UpperAlpha = validateAlpha(alpha).charAt(0); - if(UpperAlpha < 'A' || validateAlpha(alpha).charAt(0) > 'Z'){ - System.out.println("[ERROR]: 범위 내의 알파벳을 입력하세요."); - return readUpperAlpha(); + public int checkNumberType(String number, Range range) { + try { + return Integer.parseInt(number); + } catch (NumberFormatException e) { + System.out.println("[ERROR] 입력 문자의 타입이 맞지 않습니다."); + return readNumber(range); } - return UpperAlpha; } - public char readUpperAlpha(char c) { + public char readAlpha() { + System.out.print("영어를 입력해주세요(A ~ z) : "); + String alpha = sc.next(); + return validateAlpha(alpha); + } + + public char readAlpha(char c) { char start = (char)(c + 1); System.out.printf("영어를 입력해주세요(%c ~ Z) : ",start); String alpha = sc.next(); - char UpperAlpha = validateAlpha(alpha).charAt(0); - if(UpperAlpha < 'A' || validateAlpha(alpha).charAt(0) > 'Z'){ + char validAlpha = validateAlpha(alpha); + if(validAlpha < 'A' || validAlpha > 'Z'){ System.out.println("[ERROR]: 범위 내의 알파벳을 입력하세요."); - return readUpperAlpha(); + return readAlpha(); } - return UpperAlpha; + return validAlpha; } - public String validateAlpha(String alpha) { + public char validateAlpha(String alpha) { if (alpha.length() >= 2) { System.out.println("[ERROR] 입력 문자의 길이는 1을 넘을 수 없습니다."); - return readString(); + return readAlpha(); } for (char c : alpha.toCharArray()) { if (!Character.isAlphabetic(c)) { System.out.println("[ERROR] 입력 문자의 타입이 맞지 않습니다."); - return readString(); + return readAlpha(); } } - return alpha; + return alpha.charAt(0); } + + public int validateNumberType(String number) { try { return Integer.parseInt(number); From 16c549f1ff77023d7ce0314b0cf88f28ee0b1a7b Mon Sep 17 00:00:00 2001 From: rootTiket Date: Sun, 14 Apr 2024 15:46:00 +0900 Subject: [PATCH 09/13] =?UTF-8?q?[fix]:=20=EC=98=81=EC=96=B4=EB=B2=84?= =?UTF-8?q?=EC=A0=84=EC=97=90=EC=84=9C=20=EC=86=8C=EB=AC=B8=EC=9E=90?= =?UTF-8?q?=EB=8F=84=20=EB=B2=94=EC=9C=84=EC=97=90=20=EC=B6=94=EA=B0=80=20?= =?UTF-8?q?1.=20=EC=98=81=EC=96=B4=EB=B2=84=EC=A0=84=EC=97=90=EC=84=9C=20?= =?UTF-8?q?=EC=86=8C=EB=AC=B8=EC=9E=90=EA=B0=80=20=EB=B2=94=EC=9C=84?= =?UTF-8?q?=EC=97=90=20=ED=8F=AC=ED=95=A8=EB=90=98=EC=A7=80=20=EC=95=8A?= =?UTF-8?q?=EC=9D=80=20=ED=98=84=EC=83=81=20=EC=88=98=EC=A0=95=202.=20?= =?UTF-8?q?=EC=98=81=EC=96=B4=EB=B2=84=EC=A0=84=20range=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/leets/land/Controller.java | 48 +++++++++-------- src/main/java/leets/land/view/CharRange.java | 27 ++++++++++ src/main/java/leets/land/view/InputView.java | 54 ++++++++++---------- 3 files changed, 82 insertions(+), 47 deletions(-) create mode 100644 src/main/java/leets/land/view/CharRange.java diff --git a/src/main/java/leets/land/Controller.java b/src/main/java/leets/land/Controller.java index c8f557f..8dbfa09 100644 --- a/src/main/java/leets/land/Controller.java +++ b/src/main/java/leets/land/Controller.java @@ -1,5 +1,6 @@ package leets.land; +import leets.land.view.CharRange; import leets.land.view.InputView; import leets.land.view.OutputView; @@ -24,36 +25,43 @@ public void numberVersion() { Range range = new Range(1, 100); while (correct != randomNumber) { correct = inputView.readNumber(range); - if (correct < randomNumber) { - System.out.println("UP"); - range.setMin(correct + 1); - } else if (correct > randomNumber) { - System.out.println("DOWN"); - range.setMax(correct - 1); - } + printUpDown(correct, randomNumber, range); // Call printUpDown function cnt ++; } outputView.printCorrectMessage(cnt); } + public void printUpDown(int correct, int randomNumber, Range range) { + if (correct < randomNumber) { + System.out.println("UP"); + range.setMin(correct + 1); + } else if (correct > randomNumber) { + System.out.println("DOWN"); + range.setMax(correct - 1); + } + } + public void alphaVersion() { - char alpha = inputView.readAlpha(); - char randomAlpha = (char)((Math.random() * 26) + 65); - System.out.println(randomAlpha); - int cnt = 0; - char correct = alpha; - while (correct != randomAlpha) { - correct = inputView.readAlpha(correct); - printUpDown(correct, randomAlpha); - cnt ++; - outputView.printCorrectMessage(cnt); + char randomAlpha = (char)((Math.random() * 58) + 65); + System.out.println(randomAlpha); + int cnt = 0; + char correct = 'A'-1; + CharRange range = new CharRange('A', 'z'); + while (correct != randomAlpha) { + correct = inputView.readAlpha(range); + printUpDown(correct, randomAlpha, range); + cnt ++; } + outputView.printCorrectMessage(cnt); } - public void printUpDown(char correct, char randomAlpha) { + + public void printUpDown(char correct, char randomAlpha, CharRange range) { if (correct < randomAlpha) { System.out.println("UP"); - } else if(correct > randomAlpha) { - System.out.println("Down"); + range.setMin((char)(correct + 1)); + } else if (correct > randomAlpha) { + System.out.println("DOWN"); + range.setMax((char)(correct - 1)); } } } diff --git a/src/main/java/leets/land/view/CharRange.java b/src/main/java/leets/land/view/CharRange.java new file mode 100644 index 0000000..82c00fd --- /dev/null +++ b/src/main/java/leets/land/view/CharRange.java @@ -0,0 +1,27 @@ +package leets.land.view; + +public class CharRange { + private char min; + private char max; + + public CharRange(char min, char max) { + this.min = min; + this.max = max; + } + + public char getMin() { + return min; + } + + public char getMax() { + return max; + } + + public void setMin(char min) { + this.min = min; + } + + public void setMax(char max) { + this.max = max; + } +} \ No newline at end of file diff --git a/src/main/java/leets/land/view/InputView.java b/src/main/java/leets/land/view/InputView.java index 46f8b45..7c8c18d 100644 --- a/src/main/java/leets/land/view/InputView.java +++ b/src/main/java/leets/land/view/InputView.java @@ -27,6 +27,21 @@ public int checkNumberRange(int number, int min, int max) { } } + public char readAlpha(CharRange range) { + System.out.printf("영어를 입력해주세요(%c ~ %c) : ", range.getMin(), range.getMax()); + String alpha = sc.next(); + return checkAlphaRange(validateAlpha(alpha, range), range); + } + + public char checkAlphaRange(char alpha, CharRange range) { + if (alpha < range.getMin() || alpha > range.getMax()) { + System.out.println("[ERROR] 범위 내의 알파벳을 입력하세요. "); + return readAlpha(range); + } else { + return alpha; + } + } + public int checkNumberRange(int number, Range range) { if (number < range.getMin() || number > range.getMax()) { System.out.println("[ERROR] 범위 내의 숫자를 입력하세요. "); @@ -60,37 +75,22 @@ public int checkNumberType(String number, Range range) { } } - public char readAlpha() { - System.out.print("영어를 입력해주세요(A ~ z) : "); - String alpha = sc.next(); - return validateAlpha(alpha); - } - - public char readAlpha(char c) { - char start = (char)(c + 1); - System.out.printf("영어를 입력해주세요(%c ~ Z) : ",start); - String alpha = sc.next(); - char validAlpha = validateAlpha(alpha); - if(validAlpha < 'A' || validAlpha > 'Z'){ - System.out.println("[ERROR]: 범위 내의 알파벳을 입력하세요."); - return readAlpha(); - } - return validAlpha; - } - - public char validateAlpha(String alpha) { + public char validateAlpha(String alpha, CharRange range) { if (alpha.length() >= 2) { System.out.println("[ERROR] 입력 문자의 길이는 1을 넘을 수 없습니다."); - return readAlpha(); + return readAlpha(range); } - for (char c : alpha.toCharArray()) { - if (!Character.isAlphabetic(c)) { - System.out.println("[ERROR] 입력 문자의 타입이 맞지 않습니다."); - return readAlpha(); - } + char c = alpha.charAt(0); + if (!(c >= 'A' && c <= 'Z') && !(c >= 'a' && c <= 'z')) { + System.out.println("[ERROR] 입력 문자의 타입이 맞지 않습니다."); + return readAlpha(range); } - return alpha.charAt(0); - } + if (c < range.getMin() || c > range.getMax()) { + System.out.println("[ERROR] 범위 내의 알파벳을 입력하세요. "); + return readAlpha(range); + } + return c; +} From e82ec030e96ab1f1244527f05fe38730ad3600e1 Mon Sep 17 00:00:00 2001 From: Leeul <92284769+rootTiket@users.noreply.github.com> Date: Sun, 14 Apr 2024 15:47:40 +0900 Subject: [PATCH 10/13] Update README.md --- README.md | 35 +---------------------------------- 1 file changed, 1 insertion(+), 34 deletions(-) diff --git a/README.md b/README.md index 09a6905..ae3710b 100644 --- a/README.md +++ b/README.md @@ -1,37 +1,4 @@ -public int readNumber(int min, int max) { - System.out.printf("숫자를 입력해주세요(%d ~ %d) : ", min, max); - String number = sc.next(); - return checkNumberRange(checkNumberType(number), min, max); -} - -public int checkNumberRange(int number, int min, int max) { - if (number < min || number > max) { - System.out.println("[ERROR] 범위 내의 숫자를 입력하세요. "); - return readNumber(min, max); - } else { - return number; - } -}public void numberVersion() { - double randomValue = Math.random(); - int randomNumber = (int)(randomValue *100) +1; - System.out.println(randomNumber); - int cnt = 0; - int correct = -1; - int min = 1; - int max = 100; - while (correct != randomNumber) { - correct = inputView.readNumber(min, max); - if (correct < randomNumber) { - System.out.println("UP"); - min = correct + 1; - } else if (correct > randomNumber) { - System.out.println("DOWN"); - max = correct - 1; - } - cnt ++; - } - outputView.printCorrectMessage(cnt); -}# 👆 업다운 +# 👆 업다운
From 846e9dd018a3f5173a2bd55277995c30ffe85048 Mon Sep 17 00:00:00 2001 From: rootTiket Date: Sun, 14 Apr 2024 15:56:25 +0900 Subject: [PATCH 11/13] =?UTF-8?q?[fix]:=20=EC=A0=95=EB=8B=B5=EC=9D=B4=20?= =?UTF-8?q?=EC=B6=9C=EB=A0=A5=EB=90=98=EC=A7=80=20=EC=95=8A=EA=B2=8C=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/leets/land/Controller.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main/java/leets/land/Controller.java b/src/main/java/leets/land/Controller.java index 8dbfa09..909864d 100644 --- a/src/main/java/leets/land/Controller.java +++ b/src/main/java/leets/land/Controller.java @@ -19,7 +19,6 @@ public void run() { public void numberVersion() { double randomValue = Math.random(); int randomNumber = (int)(randomValue *100) +1; - System.out.println(randomNumber); int cnt = 0; int correct = -1; Range range = new Range(1, 100); @@ -43,7 +42,6 @@ public void printUpDown(int correct, int randomNumber, Range range) { public void alphaVersion() { char randomAlpha = (char)((Math.random() * 58) + 65); - System.out.println(randomAlpha); int cnt = 0; char correct = 'A'-1; CharRange range = new CharRange('A', 'z'); From cc14d31943017b60396dd4ed156e9e8e3b9b71d5 Mon Sep 17 00:00:00 2001 From: rootTiket Date: Thu, 18 Apr 2024 14:12:53 +0900 Subject: [PATCH 12/13] =?UTF-8?q?[refactor]:=20=EC=98=88=EC=99=B8=20?= =?UTF-8?q?=EC=B2=98=EB=A6=AC=20=EB=B0=A9=EC=8B=9D=20=EB=B3=80=EA=B2=BD=20?= =?UTF-8?q?1.=20=EC=98=88=EC=99=B8=20=EC=B2=98=EB=A6=AC=20=ED=95=A8?= =?UTF-8?q?=EC=88=98=EC=9D=98=20=EB=B0=A9=EC=8B=9D=EC=9D=84=20=EC=98=88?= =?UTF-8?q?=EC=99=B8=20=EB=8D=98=EC=A7=80=EA=B8=B0=EB=A1=9C=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD=202.=20=EC=88=AB=EC=9E=90=20=EB=B2=94=EC=9C=84?= =?UTF-8?q?=EB=A5=BC=20range=20=ED=81=B4=EB=9E=98=EC=8A=A4=EC=97=90?= =?UTF-8?q?=EC=84=9C=20=EB=8D=B0=EC=9D=B4=ED=84=B0=EB=A5=BC=20=EA=B0=80?= =?UTF-8?q?=EC=A0=B8=EC=98=A4=EB=8A=94=20=EB=8C=80=EC=8B=A0=20isInRange=20?= =?UTF-8?q?=ED=95=A8=EC=88=98=EB=A5=BC=20=EC=82=AC=EC=9A=A9=ED=95=98?= =?UTF-8?q?=EB=8F=84=EB=A1=9D=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 1 + src/main/java/leets/land/Controller.java | 10 +- src/main/java/leets/land/UpNumberVersion.java | 13 --- .../land/{view => domain}/CharRange.java | 6 +- .../java/leets/land/{ => domain}/Range.java | 14 ++- src/main/java/leets/land/view/InputView.java | 99 +++++++++++-------- .../leets/land/UpdownApplicationTests.java | 14 ++- 7 files changed, 92 insertions(+), 65 deletions(-) delete mode 100644 src/main/java/leets/land/UpNumberVersion.java rename src/main/java/leets/land/{view => domain}/CharRange.java (77%) rename src/main/java/leets/land/{ => domain}/Range.java (76%) diff --git a/build.gradle b/build.gradle index 4fe6044..c27c8be 100644 --- a/build.gradle +++ b/build.gradle @@ -20,6 +20,7 @@ dependencies { testImplementation platform('org.assertj:assertj-bom:3.25.1') testImplementation('org.junit.jupiter:junit-jupiter') testImplementation('org.assertj:assertj-core') + testImplementation('org.mockito:mockito-core') } tasks.named('test') { diff --git a/src/main/java/leets/land/Controller.java b/src/main/java/leets/land/Controller.java index 909864d..f604874 100644 --- a/src/main/java/leets/land/Controller.java +++ b/src/main/java/leets/land/Controller.java @@ -1,15 +1,15 @@ package leets.land; -import leets.land.view.CharRange; +import leets.land.domain.Range; +import leets.land.domain.CharRange; import leets.land.view.InputView; import leets.land.view.OutputView; public class Controller { private final InputView inputView = new InputView(); private final OutputView outputView = new OutputView(); - private final UpNumberVersion upNumberVersion = new UpNumberVersion(); public void run() { - int version = inputView.versionInput(); + int version = inputView.getVersionInput(); if (version == 1) { numberVersion(); } else { @@ -23,7 +23,7 @@ public void numberVersion() { int correct = -1; Range range = new Range(1, 100); while (correct != randomNumber) { - correct = inputView.readNumber(range); + correct = inputView.getNumberInput(range); printUpDown(correct, randomNumber, range); // Call printUpDown function cnt ++; } @@ -46,7 +46,7 @@ public void alphaVersion() { char correct = 'A'-1; CharRange range = new CharRange('A', 'z'); while (correct != randomAlpha) { - correct = inputView.readAlpha(range); + correct = inputView.getCharInput(range); printUpDown(correct, randomAlpha, range); cnt ++; } diff --git a/src/main/java/leets/land/UpNumberVersion.java b/src/main/java/leets/land/UpNumberVersion.java deleted file mode 100644 index 5785376..0000000 --- a/src/main/java/leets/land/UpNumberVersion.java +++ /dev/null @@ -1,13 +0,0 @@ -package leets.land; - - -public class UpNumberVersion { - - public void printUpDown(int number, int randomNumber) { - if (number < randomNumber) { - System.out.println("UP"); - } else if(number > randomNumber) { - System.out.println("Down"); - } - } -} diff --git a/src/main/java/leets/land/view/CharRange.java b/src/main/java/leets/land/domain/CharRange.java similarity index 77% rename from src/main/java/leets/land/view/CharRange.java rename to src/main/java/leets/land/domain/CharRange.java index 82c00fd..5d43729 100644 --- a/src/main/java/leets/land/view/CharRange.java +++ b/src/main/java/leets/land/domain/CharRange.java @@ -1,4 +1,4 @@ -package leets.land.view; +package leets.land.domain; public class CharRange { private char min; @@ -24,4 +24,8 @@ public void setMin(char min) { public void setMax(char max) { this.max = max; } + + public boolean isInRange(char value) { + return value >= min && value <= max; + } } \ No newline at end of file diff --git a/src/main/java/leets/land/Range.java b/src/main/java/leets/land/domain/Range.java similarity index 76% rename from src/main/java/leets/land/Range.java rename to src/main/java/leets/land/domain/Range.java index 1787536..7022645 100644 --- a/src/main/java/leets/land/Range.java +++ b/src/main/java/leets/land/domain/Range.java @@ -1,4 +1,4 @@ -package leets.land; +package leets.land.domain; public class Range { private int min; @@ -13,15 +13,19 @@ public int getMin() { return min; } - public int getMax() { - return max; - } - public void setMin(int min) { this.min = min; } + public int getMax() { + return max; + } + public void setMax(int max) { this.max = max; } + + public boolean isInRange(int value) { + return value >= min && value <= max; + } } diff --git a/src/main/java/leets/land/view/InputView.java b/src/main/java/leets/land/view/InputView.java index 7c8c18d..b4d57cf 100644 --- a/src/main/java/leets/land/view/InputView.java +++ b/src/main/java/leets/land/view/InputView.java @@ -1,12 +1,15 @@ package leets.land.view; -import leets.land.Range; +import leets.land.domain.CharRange; +import leets.land.domain.Range; +import java.util.InputMismatchException; import java.util.Scanner; public class InputView { - private final Scanner sc = new Scanner(System.in); - public int versionInput() { + private final Scanner scanner = new Scanner(System.in); + + public int getVersionInput() { System.out.print("버전을 입력해주세요 (숫자 버전: 1, 영어 버전: 2) : "); String version = sc.next(); return validateNumberType(version); @@ -53,55 +56,73 @@ public int checkNumberRange(int number, Range range) { public int checkNumberType(String number) { try { - return Integer.parseInt(number); - } catch (NumberFormatException e) { - System.out.println("[ERROR] 입력 문자의 타입이 맞지 않습니다."); - return readNumber(1, 100); + int version = scanner.nextInt(); + validateVersion(version); + return version; + } catch (IllegalArgumentException e) { + System.out.println(e.getMessage()); + return getVersionInput(); + } catch (InputMismatchException e) { + System.out.println("[ERROR] 버전을 입력해주세요 (숫자 버전: 1, 영어 버전: 2) : "); + scanner.nextLine(); + return getVersionInput(); } } - public int readNumber(Range range) { - System.out.printf("숫자를 입력해주세요(%d ~ %d) : ", range.getMin(), range.getMax()); - String number = sc.next(); - return checkNumberRange(checkNumberType(number, range), range); + private void validateVersion(int version) { + if (version != 1 && version != 2) { + throw new IllegalArgumentException("[ERROR] 존재하지 않는 버전입니다."); + } } - public int checkNumberType(String number, Range range) { + public int getNumberInput(Range range) { + System.out.printf("숫자를 입력해주세요(%d ~ %d) : ",range.getMin(),range.getMax()); try { - return Integer.parseInt(number); - } catch (NumberFormatException e) { - System.out.println("[ERROR] 입력 문자의 타입이 맞지 않습니다."); - return readNumber(range); + int number = scanner.nextInt(); + validateNumberRange(range, number); + return number; + } catch (IllegalArgumentException e) { + System.out.println(e.getMessage()); + return getNumberInput(range); + } catch (InputMismatchException e) { + System.out.println("[ERROR] 숫자를 입력해주세요 "); + scanner.nextLine(); + return getNumberInput(range); } } - public char validateAlpha(String alpha, CharRange range) { - if (alpha.length() >= 2) { - System.out.println("[ERROR] 입력 문자의 길이는 1을 넘을 수 없습니다."); - return readAlpha(range); - } - char c = alpha.charAt(0); - if (!(c >= 'A' && c <= 'Z') && !(c >= 'a' && c <= 'z')) { - System.out.println("[ERROR] 입력 문자의 타입이 맞지 않습니다."); - return readAlpha(range); - } - if (c < range.getMin() || c > range.getMax()) { - System.out.println("[ERROR] 범위 내의 알파벳을 입력하세요. "); - return readAlpha(range); + private void validateNumberRange(Range range, int number) { + if (!range.isInRange(number)) { + throw new IllegalArgumentException("[ERROR] 범위 내의 숫자를 입력하세요. "); } - return c; -} - - + } - public int validateNumberType(String number) { + public char getCharInput(CharRange range) { + System.out.printf("영어를 입력해주세요(%c ~ %c) : ",range.getMin(),range.getMax()); + String input = scanner.next(); try { - return Integer.parseInt(number); - } catch (NumberFormatException e) { - System.out.println("[ERROR] 입력 문자의 타입이 맞지 않습니다."); - return versionInput(); + validCharLength(input); + char character = input.charAt(0); + validateCharRange(range, character); + return character; + } catch (IllegalArgumentException e) { + System.out.println(e.getMessage()); + return getCharInput(range); + } catch (InputMismatchException e) { + System.out.println("입력 문자의 타입이 맞지 않습니다. "); + scanner.nextLine(); + return getCharInput(range); + } + } + private void validateCharRange(CharRange range, char character) { + if (!range.isInRange(character)) { + throw new IllegalArgumentException("[ERROR] 범위 내의 알파벳을 입력하세요. "); + } + } + private void validCharLength(String s) { + if (s.length() >= 2) { + throw new IllegalArgumentException("[ERROR] 알파벳 한 글자만 입력해주세요 "); } } - } diff --git a/src/test/java/leets/land/UpdownApplicationTests.java b/src/test/java/leets/land/UpdownApplicationTests.java index fe61ffe..42ff34e 100644 --- a/src/test/java/leets/land/UpdownApplicationTests.java +++ b/src/test/java/leets/land/UpdownApplicationTests.java @@ -1,11 +1,21 @@ package leets.land; +import leets.land.view.InputView; +import leets.land.view.OutputView; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import static org.mockito.Mockito.*; + class UpdownApplicationTests { + UpdownApplication app; + private Controller controller; + private InputView inputViewMock; + private OutputView outputViewMock; + @Test - void contextLoads() { + public void setUp() { + controller = new Controller(); } - } From 5d7626a941af043a0463783bd48d1da37f2e8988 Mon Sep 17 00:00:00 2001 From: rootTiket Date: Thu, 18 Apr 2024 14:26:15 +0900 Subject: [PATCH 13/13] =?UTF-8?q?[feat]:=20inputView=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=EC=BD=94=EB=93=9C=20=EC=9E=91=EC=84=B1=201.=20?= =?UTF-8?q?=EC=9E=85=EB=A0=A5=EC=8B=9C=20=EC=98=88=EC=99=B8=EC=B2=98?= =?UTF-8?q?=EB=A6=AC=EC=97=90=20=EB=8C=80=ED=95=9C=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=81=AC=EC=BD=94=EB=93=9C=20=EC=9E=91=EC=84=B1=202.=20?= =?UTF-8?q?=EC=95=8C=ED=8C=8C=EB=B2=B3=20=EB=91=90=EA=B0=9C=20=EC=9E=85?= =?UTF-8?q?=EB=A0=A5=20=EC=98=88=EC=99=B8=EC=B2=98=EB=A6=AC=EC=97=90=20?= =?UTF-8?q?=EB=8C=80=ED=95=9C=20=ED=85=8C=EC=8A=A4=ED=8A=B8=EC=BD=94?= =?UTF-8?q?=EB=93=9C=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/leets/land/view/InputView.java | 52 ++----------------- .../java/leets/land/view/InputViewTest.java | 50 ++++++++++++++++++ 2 files changed, 54 insertions(+), 48 deletions(-) create mode 100644 src/test/java/leets/land/view/InputViewTest.java diff --git a/src/main/java/leets/land/view/InputView.java b/src/main/java/leets/land/view/InputView.java index b4d57cf..28edc40 100644 --- a/src/main/java/leets/land/view/InputView.java +++ b/src/main/java/leets/land/view/InputView.java @@ -11,50 +11,6 @@ public class InputView { public int getVersionInput() { System.out.print("버전을 입력해주세요 (숫자 버전: 1, 영어 버전: 2) : "); - String version = sc.next(); - return validateNumberType(version); - } - - public int readNumber(int min, int max) { - System.out.printf("숫자를 입력해주세요(%d ~ %d) : ", min, max); - String number = sc.next(); - return checkNumberRange(checkNumberType(number), min, max); - } - - public int checkNumberRange(int number, int min, int max) { - if (number < min || number > max) { - System.out.println("[ERROR] 범위 내의 숫자를 입력하세요. "); - return readNumber(min, max); - } else { - return number; - } - } - - public char readAlpha(CharRange range) { - System.out.printf("영어를 입력해주세요(%c ~ %c) : ", range.getMin(), range.getMax()); - String alpha = sc.next(); - return checkAlphaRange(validateAlpha(alpha, range), range); - } - - public char checkAlphaRange(char alpha, CharRange range) { - if (alpha < range.getMin() || alpha > range.getMax()) { - System.out.println("[ERROR] 범위 내의 알파벳을 입력하세요. "); - return readAlpha(range); - } else { - return alpha; - } - } - - public int checkNumberRange(int number, Range range) { - if (number < range.getMin() || number > range.getMax()) { - System.out.println("[ERROR] 범위 내의 숫자를 입력하세요. "); - return readNumber(range); - } else { - return number; - } - } - - public int checkNumberType(String number) { try { int version = scanner.nextInt(); validateVersion(version); @@ -69,7 +25,7 @@ public int checkNumberType(String number) { } } - private void validateVersion(int version) { + public void validateVersion(int version) { if (version != 1 && version != 2) { throw new IllegalArgumentException("[ERROR] 존재하지 않는 버전입니다."); } @@ -91,7 +47,7 @@ public int getNumberInput(Range range) { } } - private void validateNumberRange(Range range, int number) { + public void validateNumberRange(Range range, int number) { if (!range.isInRange(number)) { throw new IllegalArgumentException("[ERROR] 범위 내의 숫자를 입력하세요. "); } @@ -114,12 +70,12 @@ public char getCharInput(CharRange range) { return getCharInput(range); } } - private void validateCharRange(CharRange range, char character) { + public void validateCharRange(CharRange range, char character) { if (!range.isInRange(character)) { throw new IllegalArgumentException("[ERROR] 범위 내의 알파벳을 입력하세요. "); } } - private void validCharLength(String s) { + public void validCharLength(String s) { if (s.length() >= 2) { throw new IllegalArgumentException("[ERROR] 알파벳 한 글자만 입력해주세요 "); } diff --git a/src/test/java/leets/land/view/InputViewTest.java b/src/test/java/leets/land/view/InputViewTest.java new file mode 100644 index 0000000..61bab6c --- /dev/null +++ b/src/test/java/leets/land/view/InputViewTest.java @@ -0,0 +1,50 @@ +package leets.land.view; + +import leets.land.domain.CharRange; +import leets.land.domain.Range; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import java.util.Random; + +import static org.junit.jupiter.api.Assertions.*; + +class InputViewTest { + InputView inputView; + Range range; + @BeforeEach + void setUp() { + inputView = new InputView(); + } + + @DisplayName("지정 버전 이외에 버전을 입력하면 예외처리") + @Test + void getVersionInput() { + IllegalArgumentException e = assertThrows(IllegalArgumentException.class, ()-> + inputView.validateVersion(0) ); + } + + @DisplayName("범위 외의 숫자가 입력되면 예외처리") + @Test + void validateNumberRange() { + range = new Range(1,100); + IllegalArgumentException e = assertThrows(IllegalArgumentException.class, ()-> + inputView.validateNumberRange(range,101) ); + } + + @DisplayName("범위 외의 알파벳이 입력되면 예외처리") + @Test + void validateCharRange() { + CharRange charRange = new CharRange('A','z'); + IllegalArgumentException e = assertThrows(IllegalArgumentException.class, ()-> + inputView.validateCharRange(charRange,',') ); + } + @DisplayName("알파벳이 두개 입력되면 예외처리") + @Test + void validCharLength() { + String doubleString = "ab"; + IllegalArgumentException e = assertThrows(IllegalArgumentException.class, ()-> + inputView.validCharLength(doubleString)); + } +} \ No newline at end of file