【问题标题】:NullPointerException when trying to run PostFixCalculator in Java尝试在 Java 中运行 PostFixCalculator 时出现 NullPointerException
【发布时间】:2014-04-01 22:17:12
【问题描述】:

我已经让我的代码可以编译和运行,但现在我在两个不同的地方遇到了异常,如下所示:

Exception in thread "main" java.lang.NullPointerException
at PostFixCalculator.storeOperand(PostFixCalculator.java:97)
at CalcTest.main(CalcTest.java:17)

...我完全不确定出了什么问题。第一个错误出现在

处的代码中
myStack.push(operand);

但我很迷茫,不知道从这里去哪里......

    import java.util.*;
    public class PostFixCalculator {
    private DoubleStack<Double> myStack;
    private ArrayList<Double> evalList;
    //private Map<String, Operator> operatorMap;
    Map<String, Operator> operatorMap = new HashMap<String, Operator>();

    public PostFixCalculator () {
        Map<String, Operator> operatorMap = new HashMap<String, Operator>();  
        operatorMap.put("+", new AddOp());
        operatorMap.put("add", new AddOp());
        operatorMap.put("-", new SubOp());
        operatorMap.put("sub", new SubOp());
        operatorMap.put("/", new DivOp());
        operatorMap.put("div", new DivOp());
        operatorMap.put("*", new MultOp());
        operatorMap.put("mult", new MultOp());
        operatorMap.put("=", new PrintOp());
        operatorMap.put("print", new PrintOp());     
    }      
    public class AddOp implements Operator {
        public AddOp () {
        }
        public int numArgs () {
            return 2;
        }
        public double eval (List<Double> args) {
            double a = args.get(0);
            double b = args.get(1);
            double sum = a + b;
            return sum;
        }
    }
    public class SubOp implements Operator {
        public SubOp () {
        }

        public int numArgs () {
            return 2;
        }
        public double eval (List<Double> args) {
            double a = args.get(0);
            double b = args.get(1);
            double difference = a - b;
            return difference;
        }
    }
    public class DivOp implements Operator {
        public DivOp () {
        }

        public int numArgs () {
            return 2;
        }
        public double eval (List<Double> args) {
            double a = args.get(0);
            double b = args.get(1);
            double quotient = a / b;
            return quotient;
        }
    }
    public class MultOp implements Operator {
        public MultOp () {
        }

        public int numArgs () {
            return 2;
        }
        public double eval (List<Double> args) {
            double a = args.get(0);
            double b = args.get(1);
            double product = a * b;
            return product;
        }
    }
    public class PrintOp implements Operator {
        public PrintOp () {
        }
        public int numArgs () {
            return 1;
        }
        public double eval (List<Double> args) {
            System.out.println(myStack.pop());
            return 1;
        }
    }
    public void storeOperand (double operand) {
        myStack.push(operand);
    }
    public void evalOperator (String operator) {
        Operator o = operatorMap.get(operator);
        ArrayList<Double> evalList = new ArrayList<Double>();
        if (o.numArgs() == 2) {
            double a = myStack.pop();
            double b = myStack.pop();
            evalList.add(a);
            evalList.add(b);
        }
        else {
            double a = myStack.pop();
            evalList.add(a);
        }
        double answer = o.eval(evalList);
        myStack.push(answer);
    }
}

【问题讨论】:

  • 我收到 16 个错误”哪些错误?

标签: java list map compiler-errors


【解决方案1】:

确保您正在导入您正在使用的所有内容。在文件顶部添加:

import java.util.ArrayList;

如果您使用的是 Eclipse,您可以按 Ctrl-Shift-O 来修复您的导入。

【讨论】:

  • 谢谢!我为 ArrayList 和 LinkedList 添加了导入语句,但仍然出现错误...
  • 好的,请编辑您的原始问题帖子并将您现在拥有的代码替换为您的 PostFixCalculator.java 文件的完整内容。
  • 您声明了myStack,但您从未初始化它。将private DoubleStack&lt;Double&gt; myStack; 更改为private DoubleStack&lt;Double&gt; myStack = new DoubleStack&lt;Double&gt;();
【解决方案2】:

您仍然缺少以下导入:

import java.util.HashMap;
import java.util.List;
import java.util.Map;

然后检查与您的自定义类型相关的剩余错误。

【讨论】:

  • 我确实 import java.util*;...让我用我的新代码和新错误重新编辑我的问题...
猜你喜欢
  • 1970-01-01
  • 2011-11-14
  • 1970-01-01
  • 1970-01-01
  • 2021-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-31
相关资源
最近更新 更多