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>();
}