我已經遇到了我的Java PostFix calc程序中的一個障礙,至今我無法修復。特別是,這個程序導致了一個NullPointerException,我不知道爲什麼。毫不遲疑,在這裏。NullPointerException,計算器程序
首先是tokenizer類,它將空格分隔的字符串解析爲字符串標記(無論如何理論上)。
import java.io.*;
import java.util.*;
public class Tokenizer {
private Queue<String> tokens;
public Tokenizer(String input){
loadString(input);
}
public void loadString(String input){
tokens = new LinkedList<String>();
String[] toks = input.split(" ");
for (String s : toks){
tokens.add(s);
}
}
public Iterator<String> getIterator(){
return tokens.iterator();
}
}
這裏是我的計算器類..
import java.util.*;
public class calculator {
private static Stack<String> myStack; // to be accessed by static method
private static final Set<String> operators = new HashSet<>();
static {
operators.add("+");
operators.add("-");
// and others
}
public static boolean isOperator(String token){
return operators.contains(token);
}
public static float performOperation(String operator, float f1, float f2){
switch(operator){
case "+":
return f1 + f2;
case "-":
return f1 - f2;
// and others
}
throw new IllegalArgumentException("Unsupported Operator");
}
public static float calculate(String expr) throws IllegalArgumentException{
float result;
Tokenizer t = new Tokenizer(expr);
Iterator<String> myIterator = t.getIterator();
//Begin Calculation
while (myIterator.hasNext()){
String myToken = myIterator.next();
if (!isOperator(myToken)){
myStack.push(myToken);
}
else {
float f1 = Float.parseFloat(myStack.pop());
float f2 = Float.parseFloat(myStack.pop());
result = performOperation(myToken, f1, f2);
myStack.push(result);
}
result = Float.parseFloat(myStack.pop());
return result;
}
}
這裏是堆棧跟蹤:103
java.lang.NullPointerException
at PostfixCalculator.calculate(PostfixCalculator.java:103)
at PostfixCalculatorTest.calculate(PostfixCalculatorTest.java:30)
線是myStack.push(); 第30行爲空
可以粘貼錯誤痕跡 – Kick
我如何在Netbeans上做到這一點? – AmazingVal
發佈堆棧跟蹤。同時告訴我們空指針是哪一行。堆棧跟蹤應位於程序通常所在的控制檯中。 –