I am writing a program to take in infix expressions as a string and evaluate them, returning a double as a result. However, when I call the Calculator class from main, I get a null pointer exception. Am I missing something in my Constructor?
Here is my main class where the calculator is called from:
import java.util.Scanner;
public class Generator {
public static Calculator calc;
public Generator() {
calc = new Calculator();
}
public static void main(String [] args) {
Scanner scan = new Scanner(System.in);
//calc = new Calculator();
System.out.println("Enter the string you want to process");
String equation = scan.nextLine();
double result = calc.solve(equation);
System.out.println("Result is: " + result);
}
}
And here is my Calculator class.
public class Calculator {
public Stack<Double> operands;
public Stack<Character> operators;
//Constructor
public Calculator() {
operands = new Stack<>();
operators = new Stack<>();
}
public Double solve(String equation) {
char current;
String number1 = "";
double value1;
for(int i = 0; i < equation.length(); i++) {
current = equation.charAt(i);
switch(current) {
case '1': case'2': case'3':
case '4': case'5': case'6':
case '7': case'8': case'9': case '0':
while(isOperand(current))
number1 += current;
value1 = Double.parseDouble(number1);
operands.push(value1);
break;
case '+': case '-': case '*': case '/':
while(!operators.empty() && !hasPrecedence(operators.peek(), current)) {
value1 = popStackAndSolve(operands, operators);
operands.push(value1);
}
operators.push(current);
break;
case '(':
operators.push(current);
break;
case ')':
char topOperator = operators.peek();
while(topOperator != '(') {
value1 = popStackAndSolve(operands, operators);
operands.push(value1);
topOperator = operators.peek();
}
operators.pop();
break;
default:
break;
}
while(!operators.empty()) {
value1 = popStackAndSolve(operands, operators);
operands.push(value1);
}
}
return operands.peek();
}
(I have not included the isOperand(), hasPrecedence(), and popStackAndSolve() methods because they work as they should, however, if you would like to see them anyway, please let me know.)
I believe I am making a very simple PEBCAC error here, but I can't figure out what it is for the life of me. I have spent hours going through textbooks, forums, and javadocs and can't find the solution. Any advice you could offer is appreciated.
EDIT: It is throwing the error on the line (double result = calc.solve(equation);).
EDIT 2: Solved. Thank you very much. id10t error at work.