Java 奇数空指针异常

Java 奇数空指针异常,java,nullpointerexception,Java,Nullpointerexception,我马上就去。 所以我有一段代码,它得到一个空指针异常。我试着查找它的原因以及如何修复它,但这就是为什么我对这个特定代码感到困惑的原因。今天早些时候,它运行得很好,现在它抛出了一个异常。有什么帮助吗?我可能只是忽略了一些愚蠢的事情,但这很令人沮丧。代码如下: import java.util.*; import java.io.*; public class ShopMain<T> { List<T> stock; public void Shop() { stock

我马上就去。 所以我有一段代码,它得到一个空指针异常。我试着查找它的原因以及如何修复它,但这就是为什么我对这个特定代码感到困惑的原因。今天早些时候,它运行得很好,现在它抛出了一个异常。有什么帮助吗?我可能只是忽略了一些愚蠢的事情,但这很令人沮丧。代码如下:

import java.util.*;
import java.io.*;

public class ShopMain<T> {
List<T> stock;


public void Shop() { stock = new LinkedList<T>(); }

public T buy() { return stock.remove(0); }

void sell(T item) { stock.add(item); }

void buy(int n, Collection<? super T>items) {
    for (T e : stock.subList(0, n)) {
    items.add(e);
    }
    for (int i=0; i<n; ++i) stock.remove(0);
}

void sell(Collection<? extends T>  items) {
    for (T e : items) {
    stock.add(e);
    }
}


public static void main (String[] args) {
ShopMain<Marker> paintballShop = new ShopMain<Marker>();
Console console = System.console();
System.out.println("1 - Test Suite");
String input = console.readLine("Please select the corresponding number to your choice.\n");
if(input.equals("1")){
    Stack<Marker> stack = new Stack<Marker>();
    Set<Marker> hashset = new HashSet<Marker>();
    System.out.println("Test Suite : Tests List, Stack, HashSet");
    paintballShop.sell(new Geo3()); 
    paintballShop.sell(new Ego11());
    paintballShop.buy();
    paintballShop.buy(2, stack); //Stack use
    paintballShop.sell(stack); //Stack use
    paintballShop.buy(3, hashset); //HashSet
    paintballShop.sell(hashset); //HashSet
    System.out.println("Tests Complete");

}
}
}
最后这些位只是对象及其父类的类“占位符”

public class Marker{}

public class Geo3 extends Marker{}

public class Ego11 extends Marker{}

再次感谢您的帮助。

这是因为您的列表
列出了库存仍未初始化。您需要对其进行初始化,以便能够在其中添加、删除元素。默认情况下,它的
null
,因此,当您尝试对其调用方法时,您会得到
NullPointerException

发生这种情况是因为您根本没有构造函数
Shop()
不是类的构造函数。构造函数与类具有相同的名称,因此您需要这样的构造函数

public ShopMain() { stock = new LinkedList<T>(); }

更改为构造函数

public ShopMain() { stock = new LinkedList<T>(); }
public ShopMain(){stock=new LinkedList();}

您没有初始化
列表的
ShopMain
构造函数

添加以下内容:

ShopMain() {
  stock<T> = new ArrayList<T>();
}
ShopMain(){
stock=newarraylist();
}

您可能需要更改:

public void Shop() { stock = new LinkedList<T>(); } 
//doesn't look a method name, may be this is what you missed
public void Shop(){stock=new LinkedList();}
//看起来不是一个方法名,可能这就是你错过的

public ShopMain(){stock=new LinkedList();}

基本上,股票从来没有初始化过。我想象这个类过去被称为
Shop

你可以改变

public class ShopMain<T> {

    List<T> stock;

    public void Shop() {
        stock = new LinkedList<T>();
    }
公共类ShopMain{
上市股票;
公众店铺(){
股票=新的LinkedList();
}

公共类ShopMain{
上市股票;
公共小店{
股票=新的LinkedList();
}

当类被构造时,它将初始化
列表

“Shop()”为什么这里有这个函数,你是指构造函数?啊,是的。我现在明白了,我觉得很傻。谢谢所有的答案!
public void Shop() { stock = new LinkedList<T>(); } 
//doesn't look a method name, may be this is what you missed
public ShopMain() { stock = new LinkedList<T>(); }
public class ShopMain<T> {

    List<T> stock;

    public void Shop() {
        stock = new LinkedList<T>();
    }
public class ShopMain<T> {

    List<T> stock;

    public ShopMain() {
        stock = new LinkedList<T>();
    }