Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Codrae #1892

Open
wants to merge 12 commits into
base: main
Choose a base branch
from
18 changes: 17 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1 +1,17 @@
# java-calculator-precourse
# java-calculator-precourse

기능 설명 : 입력한 문자열에서 숫자를 추출하여 더하는 계산기를 구현한다.

Input : 구분자와 양수로 구성된 문자열 <br>
Output : 덧셈 결과

### 구현할 기능 목록

- 문자열 입력받기
- 커스텀 구분자 인식하기
- 입력에 대한 예외 처리
- 구분자 기준으로 덧셈 계산 후 결과 반환하기

### 오류 처리 <br>
사용자가 음수와 같은 잘못된 값을 입력한 경우
IllegalArgumentExceoption 발생 & App 종료
67 changes: 65 additions & 2 deletions src/main/java/calculator/Application.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,70 @@
package calculator;

import camp.nextstep.edu.missionutils.Console;

/*
* 입력한 문자열에서 숫자를 추출하여 더하는 계산기를 구현한다.
*/
public class Application {

public static final char BASIC_SEP_ONE = ':';
public static final char BASIC_SEP_TWO = ',';
private static final char NO_CUSTOM_SEP = '\0';
public static char customSep = NO_CUSTOM_SEP;

// BASIC_SEP, CustomSep, 숫자인지 유효성 검사
public static boolean isValidChar(char c){
return (c == BASIC_SEP_ONE || c == BASIC_SEP_TWO || Character.isDigit(c) || c == customSep);
}

// 입력값 검증
public static void isValid(String input){
if(input.isEmpty()){
return;
}
if(input.contains("-") && !input.startsWith("//")) {
throw new IllegalArgumentException("NEGATIVE_NUMBERS_ARE_NOT_ALLOWED");
}
if((input.charAt(0) == '/' && input.length() < 5)) {
throw new IllegalArgumentException("Input is not valid.");
}
if(input.startsWith("//") && input.charAt(3) == '\\' && input.charAt(4) == 'n'){
customSep = input.charAt(2);
}
for (int i = 0; i < input.length(); i++){
if(customSep != NO_CUSTOM_SEP && i < 5) continue;
if(!isValidChar(input.charAt(i))){
throw new IllegalArgumentException(input.charAt(i) + " is inserted." );
}
}
}

// 문자열에서 숫자 덧셈 계산
public static int calculate(String input){
int sum = 0;
int i = (customSep == NO_CUSTOM_SEP ? 0 : 5);

while(i < input.length()){
if(!Character.isDigit(input.charAt(i)) || input.charAt(i) == customSep){
i++;
continue;
}
int num = 0;
while(i < input.length() && Character.isDigit(input.charAt(i)) && input.charAt(i) != customSep){
num = num * 10 + input.charAt(i) - '0';
i++;
}
sum += num;
}
return sum;
}

public static void main(String[] args) {
// TODO: 프로그램 구현
// 입력받기 및 입력값 검증
System.out.println("PLEASE_ENTER_THE_STRING_TO_BE_ADDED");
String input = Console.readLine();
Console.close();
isValid(input);
System.out.println("결과 : " + calculate(input));
}
}
}