好的,这是我的 switch 语句的一部分的代码:
case 1: {
System.out.print("Member ID: ");
int key = in.nextInt();
while(members.findItemByKey(key) == -1){
System.out.print("That is an invalid member ID!\nEnter a new one: ");
key = in.nextInt();
}
System.out.print("ISBN: ");
int book = in.nextInt();
while(books.findItemByKey(book) == -1){
System.out.println("That book is not in the system.\nPlease make a new choice: ");
book = in.nextInt();
}
while(stock.findItemByKey(book) != -1){
try {
m = members.get(members.findItemByKey(key));
t = books.get(books.findItemByKey(book));
} catch (Exception e) {
e.printStackTrace();
}
if(m.checkOut(t) == true){
stock.removeItem(t);
}
}
}
这是正在调用的方法:
public int findItemByKey(int key){
for(E e: list)
{
if(e.getKey() == key){
return findItem(e);
}
}
return -1;
}
public int findItem(E item){
if (item == null){
for (int i = 0; i < numElements; i++)
if(list[i]==null)
return i;
}else {
for( int i = 0; i < numElements; i++)
if (item.equals(list[i]))
return i;
}
return -1;
}
好的,我知道这里有很多东西要看,但这就是正在发生的事情。当我输入一个无效的会员 ID 时,它会正常工作,并不断要求用户输入一个新的会员 ID,直到输入一个有效的会员 ID。现在,当我输入一本书时,无论我输入的是有效还是无效的书,我都会收到此行抛出的空指针异常:
if(e.getKey() == key)
书籍、成员和股票都是在我的代码中以相同方式定义的数组列表。我不明白为什么我会在书籍而不是成员中抛出这个异常。book 和 member 的类以相同的方式定义,它们都具有相同的 getKey 方法。
也许这个问题的内容太多了,任何人都无法真正看到发生了什么。基本上我只是不明白为什么我得到一个空指针异常而不是另一个。
编辑:决定我应该为每个类发布 getKey() 方法。
public int getKey()
{
return ISBN;
}
是书本吗
public int getKey()
{
return memberId;
}
是会员专用的。
ISBN 是书籍的标识符,memberId 是我的成员的标识符。一切看起来都在调用相同的东西,但是对于书籍而不是成员而言,它会出错。只是不明白。