본문

[2017.09.15] 04. Calculator 프로젝트 [괄호O - Stack 사용X]

중요 로직

중요 로직은 아래의 그림으로 먼저 확인하자.

이전에 구현한 괄호가 없는 계산기(http://heepie.tistory.com/64)를 활용한 괄호가 있는 계산기이다. 

괄호의 위치를 찾아 괄호 안의 연산을 처리한 후 결과를 다시 넣는 방법을 반복한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
private static double noStackCalc(String target) {
    int subStartIdx;
    int subEndIdx;
    double subResult;
        
    // 괄호가 있는 연산 처리 
    while(!target.equals("")) {
        // ")" 인덱스 찾기 
        // ")" 인덱스를 기준으로 "(" 찾기 
        subEndIdx = target.indexOf(")"); 
        if (subEndIdx == -1)
            break;
        subStartIdx = target.lastIndexOf("(", subEndIdx);
        subResult = calc(target.substring(subStartIdx + 2, subEndIdx-1));
        // 새로운 연산 대상 생성     
        target = target.substring(0, subStartIdx) + " " + subResult + " " 
                        + target.substring(subEndIdx+1, target.length());
    }
        
    // 괄호가 없는 연산 처리 
    subResult = calc(target);
        
    return subResult;
}
cs



문제점 및 해결

  1. 괄호를 찾는 방법에 대한 고민
    앞에서 부터 "("를 먼저 찾을 경우, 마지막 괄호를 찾기 때문에 첫번째 괄호를 찾을 수 없었다. 그래서 ")"를 먼저 찾은 후 ")"의 인덱스를 기준으로 뒤에서부터 "("를 찾아 괄호 위치 찾기를 해결했다.
    1
    2
    3
    4
    5
    6
    7
    // ")" 인덱스 찾기 
    int subEndIdx = target.indexOf(")"); 
    if (subEndIdx == -1)
        break;
     
    // ")" 인덱스를 기준으로 "(" 찾기
    int subStartIdx = target.lastIndexOf("(", subEndIdx);
    cs


스크린 샷



#안드로이드 계산기 #사칙연산 #사칙연산 로직 #계산기 방법 #계산기 괄호

공유

댓글