Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.Stack;
- public class Question5 {
- /*Stacks and Queues: Write a program evaluate arithmetical expressions
- * that use + and * applied to nonnegative integer arguments. Expressions are in
- * reverse-Polish notation, e.g., 3 4 + 5 *, 1 3 + 5 7 + *. (from EPI)
- */
- public int evalArimathical(String s) {
- int answer = 0;
- char[] exp = s.toCharArray();
- int length = s.length();
- Stack<Integer> eval = new Stack<Integer>();
- StringBuffer buff = new StringBuffer();
- for (int i = 0; i < length; i++) {
- if (exp[i] != '+' && exp[i] != '-' && exp[i] != '*' && exp[i] != '/') {
- // In case if there are more that 1 digit of the number
- buff.delete(0, buff.length());
- // There may be more than one digits in number
- while (i < exp.length && exp[i] >= '0' && exp[i] <= '9')
- buff.append(exp[i++]);
- if(buff.toString() != null) {
- eval.push(Integer.parseInt(buff.toString()));
- }
- // not a number do calculation
- } else {
- int a = eval.pop();
- int b = eval.pop();
- switch (exp[i]) {
- case '+':
- answer = a + b;
- break;
- case '-':
- answer = a - b;
- break;
- case '*':
- answer = a * b;
- break;
- case '/':
- answer = b/a;
- break;
- default:
- }
- eval.push(answer);
- }
- }
- return answer;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement