계산기
1. String을 쪼개서 Vector에 담는다.
2. 가장 먼저 계산하여할 연산자를 찾는다.
3. 연산자를 기준으로 left, right value를 꺼낸다.
4. 연산자, left, right value를 삭제한다.
5. 연산자와 value를 연산한다.
6. 반올림을 통하여 자리수를 맞춘다.
7. Vector에 추가한다.
package babosamo.tistory;
import java.util.Vector;
public class Calculator {
public static void main(String[] args) {
String inputData = "25.4 * 8 + 120 - 45 / -3.5 + 45 + 12 / 45 * 0.12";
String[] splitData = inputData.split(" ");
Vector<String> values = new Vector<String>();
for(int i = 0; i < splitData.length; i ++ ){
values.add(splitData[i]);
}
calculate(values);
}
private static void calculate(Vector<String> values){
printVector(values);
while(values.contains("*") || values.contains("/") || values.contains("+")|| values.contains("-")){
int opsIndex = 0;
if(values.contains("*") && values.contains("/")){
opsIndex = Math.min(values.indexOf("*"),values.indexOf("/"));
}else if(values.contains("*") ){
opsIndex = values.indexOf("*");
}else if(values.contains("/")){
opsIndex = values.indexOf("/");
}else if(values.contains("+") && values.contains("-")){
opsIndex = Math.min(values.indexOf("+"),values.indexOf("-"));
}else if(values.contains("+") ){
opsIndex = values.indexOf("+");
}else if(values.contains("-")){
opsIndex = values.indexOf("-");
}
String operator = values.get(opsIndex);
String lValue = values.get(opsIndex - 1);
String rValue = values.get(opsIndex + 1);
values.remove(opsIndex -1);
values.remove(opsIndex -1);
values.remove(opsIndex -1);
Double result = (double) 0;
switch(operator){
case "*":
result = Double.valueOf(lValue) * Double.valueOf(rValue);
break;
case "/":
result = Double.valueOf(lValue) / Double.valueOf(rValue);
break;
case "+":
result = Double.valueOf(lValue) + Double.valueOf(rValue);
break;
case "-":
result = Double.valueOf(lValue) - Double.valueOf(rValue);
break;
}
result = ((double) (Math.round(result * 1000000)) / 1000000);
values.add(opsIndex -1, result.toString());
printVector(values);
}
}
private static void printVector(final Vector<String> values){
java.util.Iterator<String> itor = values.iterator();
while(itor.hasNext()){
System.out.print(itor.next());
}
System.out.println();
}
}