Second commit
This commit is contained in:
parent
aae8344958
commit
99d10e4247
@ -6,7 +6,9 @@
|
||||
package com.rpn;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.ArrayDeque;
|
||||
import java.util.Arrays;
|
||||
import java.util.Deque;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
@ -16,6 +18,8 @@ import java.util.List;
|
||||
public class ReversePolishNotation
|
||||
{
|
||||
|
||||
private static final String OPERATORS = "+-*/";
|
||||
|
||||
public static BigDecimal evalRPN(String[] params)
|
||||
{
|
||||
return evalRPN(Arrays.asList(params));
|
||||
@ -26,7 +30,42 @@ public class ReversePolishNotation
|
||||
BigDecimal result = null;
|
||||
if (null != params && !params.isEmpty())
|
||||
{
|
||||
Deque<String> stack = new ArrayDeque<>();
|
||||
|
||||
for (String param : params)
|
||||
{
|
||||
if (!OPERATORS.contains(param))
|
||||
stack.push(param);
|
||||
else
|
||||
{
|
||||
BigDecimal b = new BigDecimal(stack.pop());
|
||||
BigDecimal a = new BigDecimal(stack.pop());
|
||||
BigDecimal res = null;
|
||||
|
||||
switch (param)
|
||||
{
|
||||
case "+":
|
||||
res = a.add(b);
|
||||
break;
|
||||
case "-":
|
||||
res = a.subtract(b);
|
||||
break;
|
||||
case "*":
|
||||
res = a.multiply(b);
|
||||
break;
|
||||
case "/":
|
||||
res = a.divide(b);
|
||||
break;
|
||||
}
|
||||
|
||||
if (null != res)
|
||||
stack.push(String.valueOf(res));
|
||||
else
|
||||
throw new IllegalStateException("Invalid operator");
|
||||
}
|
||||
}
|
||||
|
||||
result = new BigDecimal(stack.pop());
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user