From acefd109496262a60ad8e7924bf92e0a0324da5d Mon Sep 17 00:00:00 2001 From: Siul Date: Fri, 7 Feb 2025 23:18:19 +0900 Subject: [PATCH 1/3] =?UTF-8?q?readme=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index bd90ef0..3ff1832 100644 --- a/README.md +++ b/README.md @@ -1 +1,22 @@ -# java-calculator-precourse \ No newline at end of file +# java-calculator-precourse + +# 문자열 계산기 +## 테스트 클래스 만들기 + +## 문자열 입력받기 +- camp.nextstep.edu.missionutils의 Console API를 사용하여 구현해야한다(설마 여기에 ArrayList가 없겠어?) +- 그 API의 readLine()을 사용한다. + +## ArrayList numbers : 매개변수로 ArrayList를 받아 숫자 N개를 합하는 메소드 만들기 +- int sum 변수 선언 + +## extractNum 메소드 : 구분자를 구별해 숫자를 ArrayList에 담아주는 메소드 만들기 +- 인스턴스 변수로 기존 구분자(쉼표, :)를 담은 ArrayList separator 만들기 +- 입력받은 문자열을 toCharArray() 메소드를 이용해서 char 배열로 변환해준다. +- 구분자나 숫자가 아닌 다른 문자가 있다면 IllegalArgumentException를 발생시킨다. +- 입력받은 문자열에 '//'가 포함되어있다면 '//'이후의 문자를 separator에 add한다. +- 그리고 다시 문자열을 입력받는다. +- 구분자 이전까지 문자들을 StringBuilder sb에 append한다 +- 구분자가 나오면 numbers에 String을 저장한 후 sb.setLength(0)을 해서 비운 후에 다시 진행한다 + +### 입력받고 -> extractNum 메소드로 이동 -> numbers 메소드로 이동 -> 출력tor-precourse \ No newline at end of file From 44bb41205f2cac1b600c426ac341ce960825a960 Mon Sep 17 00:00:00 2001 From: Siul Date: Fri, 7 Feb 2025 23:19:17 +0900 Subject: [PATCH 2/3] =?UTF-8?q?=EA=B1=B0=EC=9D=98=20=EB=8B=A4=20=ED=95=9C?= =?UTF-8?q?=EB=93=AF=3F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/calculator/Application.java | 104 ++++++++++++++++++++++ 1 file changed, 104 insertions(+) diff --git a/src/main/java/calculator/Application.java b/src/main/java/calculator/Application.java index 573580f..3db166f 100644 --- a/src/main/java/calculator/Application.java +++ b/src/main/java/calculator/Application.java @@ -1,7 +1,111 @@ package calculator; +import camp.nextstep.edu.missionutils.Console; + +import java.util.ArrayList; + public class Application { + + // 사용자의 input을 받는다. + private String userInput; + + // 모든 숫자의 합을 저장한다. + private int sum = 0; + + // 숫자, 구분자들을 저장한다. + private ArrayList numbers; + private ArrayList separator; + + public Application(){ + numbers = new ArrayList(); + separator = new ArrayList(); + setSeparator(); + } + // userInput의 입력값을 받는다 + public void Input(){ + userInput = Console.readLine(); + } + + // 구분자 세터 + public void setSeparator() { + + // 구분자 설정 + separator.add(","); + separator.add(":"); + } + + // nums에 있는 모든 숫자를 더한다. + public void sumNumbers(ArrayList nums){ + for (String number : nums) { + sum += Integer.parseInt(number); + } + + System.out.println(sum); + } + + // numbers 개터 + public ArrayList getNumbers(){ + return numbers; + } + + // 구분자를 구별하고 숫자를 ArrayList에 담는다 + public void extractNum(){ + //구분자 초기화 + setSeparator(); + // 숫자 받아야지 + StringBuilder sb = new StringBuilder(); + + // 문자열 입력받기 + System.out.println("덧셈할 문자열을 입력해 주세요."); + Input(); + for (int i = 0; i < userInput.length(); i++){ + if ((userInput.charAt(i) == '/' && userInput.charAt(i+1) == '/')) { + // "//"를 인식하면 그 다음 문자를 구분자로 넣는다. + // 개행문자를 만나면 문자열이 끝나기 때문에 + // 개행문자를 문자열로 넣는 과정을 추가하기보단 + // 그냥 다시 문자열을 받아도 상관 없겠다는 생각을 했어요 + // 근데 구분자를 추가하고 끝나는 경우도 있다는 생각에 + // if 문을 하나 더 넣었네요 + if (i+2 < userInput.length()) { + separator.add(String.valueOf(userInput.charAt(i + 2))); + if(userInput.length() > i + 4) { + Input(); + } + } + else { + throw new IllegalArgumentException("잘못된 문자가 있는 것 같은데요?"); + } + } + else if (separator.contains(String.valueOf(userInput.charAt(i)))) { + // sb에 모여있는 숫자들이 구분자를 만나면 + // numbers로 들어가고 sb는 초기화됨 + String result = sb.toString(); + numbers.add(result); + sb.setLength(0); + } + else if (Character.isDigit(userInput.charAt(i)) ) { + if (Integer.parseInt(String.valueOf(userInput.charAt(i))) < 0) { + // 문자열에 숫자는 sb에 넣어준다. + sb.append(userInput.charAt(i)); + } + else { + throw new IllegalArgumentException("잘못된 문자가 있는 것 같은데요?"); + } + } + else { + throw new IllegalArgumentException("잘못된 문자가 있는 것 같은데요?"); + } + } + } + + public static void main(String[] args) { // TODO: 프로그램 구현 + + //생성자 호출 + Application a = new Application(); + + a.extractNum(); + a.sumNumbers(a.getNumbers()); } } From 25ffea8a03e0bad5db3c6f5cb28724a893c295e4 Mon Sep 17 00:00:00 2001 From: Siul Date: Fri, 7 Feb 2025 23:29:25 +0900 Subject: [PATCH 3/3] =?UTF-8?q?=EB=8D=94=EC=9D=B4=EC=83=81=20=EB=AA=A8?= =?UTF-8?q?=EB=A5=B4=EA=B2=A0=EC=96=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/calculator/Application.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/calculator/Application.java b/src/main/java/calculator/Application.java index 3db166f..a9093ee 100644 --- a/src/main/java/calculator/Application.java +++ b/src/main/java/calculator/Application.java @@ -3,7 +3,7 @@ import java.util.ArrayList; - +// gradlew.bat 오류가 뜬다 아무것도 모르겠다 그냥 public class Application { // 사용자의 input을 받는다.