I am tying to throw an exception when a BigInteger is greater than Integer.MAX_VALUE. It will not allow me to throw that exception for the exponent case. I am not sure how to get it to throw an exception when the biginteger value is too large to pass into the BigInteger.pow() method.
Thanks in advance.
here is the toPostfix method:
public BigInteger evalPostfix(String postfix){
BigInteger a, b;
Stack stack = new Stack();
for(int i=0; i<postfix.length(); i++){
if(this.isOp(postfix.charAt(0)))
throw new ArithmeticException("Malformed Postfix Expression");
switch(postfix.charAt(i)){
case '+':
a = (BigInteger)stack.pop();
b = (BigInteger)stack.pop();
stack.push(b.add(a));
break;
case '-':
a = (BigInteger)stack.pop();
b = (BigInteger)stack.pop();
stack.push(b.subtract(a));
break;
case '*':
a = (BigInteger)stack.pop();
b = (BigInteger)stack.pop();
stack.push(b.multiply(a));
break;
case '/':
a = (BigInteger)stack.pop();
b = (BigInteger)stack.pop();
if(a == BigInteger.valueOf(0)){
throw new ArithmeticException("Cannot divide by 0");
}else{
stack.push(b.divide(a));
}
break;
case '%':
a = (BigInteger)stack.pop();
b = (BigInteger)stack.pop();
stack.push(b.mod(a));
break;
case '^':
a = (BigInteger)stack.pop();
b = (BigInteger)stack.pop();
if(b.compareTo(BigInteger.valueOf(Integer.MAX_VALUE)) > 0)
throw new ArithmeticException("BigInteger value is too large");
stack.push(a.pow(b.intValue()));
break;
default:
if(this.numbers.get(postfix.substring(i, i+1)) == null)
throw new NullPointerException(postfix.substring(i, i+1) + " is not mapped to any value");
stack.push(this.numbers.get(postfix.substring(i,i+1)));
}
}
return (BigInteger)stack.pop();
}