Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 棘手的NullPointerException_Java_If Statement_Nullpointerexception_Boolean - Fatal编程技术网

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可能也会替换其构造函数中的值,如果它有理由这样做的话。(我想不出它可能的原因。)无论如何,在使用它之前,你必须在某个地方初始化它。