사칙연산 계산기입니다. 현재 30라인정도로 줄여보았습니다.
괄호 계산은 지원하지 않지만 이중부호 까지는 지원 합니다.
List<Double> numList = new ArrayList<Double>();
public double cal(String org){
double result = 0;
char orgChar[] = org.replaceAll(" ", "").toCharArray();
List<Integer> index = new ArrayList<Integer>();
for (int i = 0; i < orgChar.length; i++){
boolean numChk = String.valueOf(orgChar).matches("[0-9.]");
boolean numEd = index.size() % 2 == 0 ? true: false;
if (!(numChk || numEd)) index.add(i);
else if (numChk && (numEd || i == 0)) index.add(i);
if (i == orgChar.length - 1) index.add(orgChar.length);
}
for (int i = 0; i < index.size(); i+=2){
String opValue = i == 0 ? org.substring(0, index.get(i)) : org.substring(index.get(i - 1), index.get(i));
int state = (opValue.length() - opValue.replaceAll("-", "").length()) % 2 == 0 ? 1 : -1;
double numValue = state * Double.parseDouble(org.substring(index.get(i), index.get(i+1)));
if (opValue.contains("*")) numValue *= numList.remove(numList.size() - 1);
if (opValue.contains("/")) numValue = numList.remove(numList.size() - 1)/numValue ;
numList.add(numValue);
}
for (int i = 0; i < numList.size(); i++) result += numList.get(i);
return result;
}
결과값 = (-4)-(-40)+(-2) =34
잘 나오는 것을 확인해볼수 있습니다.
'JAVA > Java 기본 돌아보기' 카테고리의 다른 글
[Java] Timer 를 등록하자. 매초마다 실행 (0) | 2018.10.22 |
---|---|
[Java] 현재 작업중인 Object를 저장하자(Object2FIle File2Object) (0) | 2018.10.10 |
[Java] 기념일 계산 (0) | 2018.10.10 |
[Java] String2Date Date2String (0) | 2018.10.10 |
[Java] n자리 수 반올림 (0) | 2018.10.08 |