0

好的,这是我的 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 是我的成员的标识符。一切看起来都在调用相同的东西,但是对于书籍而不是成员而言,它会出错。只是不明白。

4

1 回答 1

0

e是 null 或者从语句返回的值e.getKey()是 null。

您必须确保列表不包含null元素,然后它们key的 s 也应该不为空。

如果你想忽略这些值为空的值,你可以这样做:

if(e!=null && e.getKey()!=null && e.getKey() == key){
     //statements here.
}
于 2013-10-31T02:18:12.503 回答