문자열로 만들어진 10 + 10을 계산 하려면 어떻게 해야할까?
int로 받으면 그냥 편하게 계산 할 수 있지만 String 타입인 상황에선 조금 달라져. 문자끼리는 못 더하니까! 그래서 어떻게 하냐? 내가 저번에 알려준 split()함수 있었지? 그거를 활용할거야.
테스트 클래스에는 요렇게 작성해주고
@Test
@DisplayName("1 + 1 == 2")
public void test1() {
assertThat(Calc.run("1 + 1")).isEqualTo(2);
}
public class Calc {
public static int run(String exp) {
String[] bits = exp.split(" \\+ ");
int a = Integer.parseInt(bits[0]);
int b = Integer.parseInt(bits[1]);
return a + b;
}
}
split()를 이용해 +를 기준으로 문자열을 나눌거야! 그리고 bits라는 배열에 저장할 생각이야. 다음이 중요한데 Integer.paseInt()라고 들어봤니? 바로 문자로 되어진 값을 int형으로 변환 시키는거지 그래서 정수타입인 a에 1이라는 정수가 들어갈 수 있어 그래서 return을 해주면 11 은 20!! 이 나오게 돼
이번엔 문자열로 만들어진 2-1을 해볼거야 그럼 또 생각나는게 split()함수를 이용해서 문제를 풀어야하잖아? 그렇지만 문가 있어. 앞에서 했던 1+1 테스트 케이스도 누적되어서 같이 실행이 되야해. 그러기 위해서는 나는 조건문을 활용할 생각이야.
public class Calc {
public static int run(String exp) {
boolean needToPlus = exp.contains("+");
boolean needToMinus = exp.contains("-");
String[] bits = null;
if (needToPlus) {
bits = exp.split(" \\+ ");
} else if (needToMinus) {
bits = exp.split(" - ");
}
int a = Integer.parseInt(bits[0]);
int b = Integer.parseInt(bits[1]);
if (needToPlus) {
return a + b;
} else if (needToMinus) {
return a - b;
}
}
}
이렇게 작성이 가능하다~~
이번에는 값을 3개 더해볼거야! 그럼 먼저 나의 생각은
public static int run(String exp) {
boolean needToPlus = exp.contains("+");
boolean needToMinus = exp.contains("-");
String[] bits = null;
if (needToPlus) {
bits = exp.split(" \\+ ");
} else if (needToMinus) {
bits = exp.split(" - ");
}
int a = Integer.parseInt(bits[0]);
int b = Integer.parseInt(bits[1]);
int c = 0;
if (bits.length > 2) {
c = Integer.parseInt(bits[2]);
}
if (needToPlus) {
return a + b + c;
} else if (needToMinus) {
return a - b;
}
}
뭔말인지 알겠지??
아 참.. 여기서 부터 머리가 좀 아팠어..
이건 3개의 숫자를 -와 +를 사용해서 계산하는거야.. 그러면 먼저 생각해야할게
public class Calc {
public static int run(String exp) {
System.out.println("exp1 : " + exp);
exp = exp.replace("- ", "+ -");
System.out.println("exp2 : " + exp);
String[] bits = exp.split(" \\+ ");
int a = Integer.parseInt(bits[0]);
int b = Integer.parseInt(bits[1]);
int c = 0;
if (bits.length > 2) {
c = Integer.parseInt(bits[2]);
}
return a + b + c;
// throw new RuntimeException("해석 불가 : 올바른 계산식이 아닙니다");
}
예전에 한번 말한적이 있었는데 중간중간 과정을 보고싶으면 나는 print문을 이용해서 값을 한번씩 찍어보는것도 중요하다고 생각해!!
이 문제는 갯수가 너무 많지? 그러면 반복적으로 수행할 필요가 없고 반복을 돌면서 계산을 해보자
public class Calc {
public static int run(String exp) {
System.out.println("exp1 : " + exp);
exp = exp.replace("- ", "+ -");
System.out.println("exp2 : " + exp);
String[] bits = exp.split(" \\+ ");
int sum = 0;
for (int i = 0; i < bits.length; i++) {
sum += Integer.parseInt(bits[i]);
}
return sum;
}
}