I have written code to complete a postfix evaluation except when I am trying to handle the case below, I continue to get a negative value which I know is incorrect. Why am I getting this negative number and how do I get the correct output of 18000000000000000000? I have posted my code below and any help would be greatly appreciated.
public static Number postfixEvaluate(String e){
Long number1;
Long number2;
Number result = new Long(0);
Stack<Number> stack = new Stack();
String[] tokens = e.split(" ");
for(int j = 0; j < tokens.length; j++){
String token = tokens[j];
//System.out.println(tokens[j]);
if (!"+".equals(token) && !"*".equals(token) && !"-".equals(token) && !"/".equals(token) && !"".equals(token)) {
stack.push(Long.parseLong(token));
} else if ("".equals(token)) {
System.out.println(token);
} else {
String Operator = tokens[j];
number2 = (Long) stack.pop();
System.out.println(number2);
number1 = (Long) stack.pop();
System.out.println(number1);
if (Operator.equals("/")){
result = number1 / number2;
System.out.println(result);
}
else if(Operator.equals("*")){
result = number1 * number2;
System.out.println(result);
}
else if(Operator.equals("+")){
result = Long.sum(number1, number2);
System.out.println("Addition of: " + number1 + "+ " + number2 + "= " + result);
}
else if(Operator.equals("-")){
result = number1 - number2;
System.out.println(result);
}
else System.out.println("Illeagal symbol");
stack.push(result);
}
}
stack.pop();
//s.pop();
System.out.println("Postfix Evauation = " + result);
return result;
}
My input and output:
Input: 9000000000000000123 9000000000000000987 +
Expected Output: 18000000000000000000
Current Output: -446744073709550506