Java 棘手的NullPointerException
在我的计算机科学课程中,我们正在制作一个模拟自动售货机业务的程序。一切似乎都没有任何错误,但驱动程序中的这一行运行Java 棘手的NullPointerException,java,if-statement,nullpointerexception,boolean,Java,If Statement,Nullpointerexception,Boolean,在我的计算机科学课程中,我们正在制作一个模拟自动售货机业务的程序。一切似乎都没有任何错误,但驱动程序中的这一行运行 VendingMachine pv0001 = new SnackMachine(19.00); pv0001.addItem(new Chips("Doritos")); 它返回这个错误 Exception in thread "main" java.lang.NullPointerException at SnackMachine.addItem(SnackMach
VendingMachine pv0001 = new SnackMachine(19.00);
pv0001.addItem(new Chips("Doritos"));
它返回这个错误
Exception in thread "main" java.lang.NullPointerException
at SnackMachine.addItem(SnackMachine.java:35)
at Driver.main(Driver.java:9)
这显然源于此if语句的声明SnackMachine
code:
public boolean addItem(VendingMachineItem item)
{
if((item instanceof Snack) && (inventory.size() < maxCapacity))//error on this line
{
inventory.add(item);
return true;
}else{
return false;
}
}
公共布尔添加项(VendingMachineItem项)
{
if((零食的项目实例)&&&(inventory.size()
我似乎不知道问题出在哪里,有人能帮我吗?您是否初始化了
库存?确保在初始化自动售货机对象时初始化了库存。当您声明变量但未创建对象时,会发生空指针异常,因此它指向null。为了避免这种类型的异常,如果您没有自己创建对象,请检查null
public boolean addItem(VendingMachineItem item)
{ if( item == null )System.out.println("Item passed in must equal to null."); }
库存似乎也没有声明,我假设您必须将其作为一个全局变量,否则这也可能会导致问题。什么是库存
?告诉我们声明它的位置。为什么不使用调试器,或者如果没有调试器,则插入println语句以转储该语句前面的值。假设您正确识别了该行,则最有可能的inventory
为空。出于习惯,我强烈建议您在引用的任何实例变量前面加上this.
。这一点很明显,变量是实例变量,它降低了由于跟踪而产生错误的风险。我是在SnackMachine类中初始化库存,还是在它扩展的VendingMachine类中初始化库存?@Zigy可能是VendingMachine,假设它定义了原始变量,尽管SnackMachine可能也会替换其构造函数中的值,如果它有理由这样做的话。(我想不出它可能的原因。)无论如何,在使用它之前,你必须在某个地方初始化它。