簡體   English   中英

增強的for循環通過NullPointerException停止

[英]Enhanced for-loop stopped with NullPointerException

我的增強型for循環似乎未正確迭代。 目的是使用搜索類遍歷Contact類型的ArrayList並找到一個特定的名稱,但是由於某種原因,它僅經過第一個聯系人並在顯示后出現錯誤而停止:

Exception in thread "main" java.lang.NullPointerException
    at client.AddressBook.search(AddressBook.java:17)
    at Main.main(Main.java:31)

我的主要課程如下:

import client.AddressBook;
import client.Contact;

public class Main {

    public static void main(String[] args) {

        AddressBook ab = new AddressBook();

        Contact c1 = new Contact("jeffm@engr.uconn.edu");
        ab.add(c1);

        Contact c2 = new Contact("jeffm@engr.uconn.edu", "Jeff Meunier", "jeff");
        ab.add(c2);

        Contact c3 = new Contact("billgates@engr.uconn.edu", "Bill Gates", "bill");
        ab.add(c3);

        System.out.println(ab.search("jeff"));
    }

}

下面還列出了AddressBook和Contact類:

package client;
import java.util.ArrayList;

public class AddressBook {

    ArrayList<Contact> al = new ArrayList<Contact>();

    public void add(Contact contactAdd) {

        al.add(contactAdd);
    }

    public Contact search(String searchName) {

        for(Contact obj: al) {

            if(obj.getNickName().equals(searchName)) {
                return obj;
            }
        }
        return null;
    }

    public String remove(String nickname) {

        search(nickname);
        al.remove(nickname);

        return nickname;
    }

    public void show() {

        int x = 1;
        for(Contact obj: al) {

            System.out.println(x + ". " + obj.toString());
            x++;
        }
    }
}



package client;

public class Contact {

    public String _emailAddress = null;
    public String _fullName = null;
    public String _nickName = null;

    public Contact(String emailaddress, String fullname, String nickname) {

        _emailAddress = emailaddress;
        _fullName = fullname;
        _nickName = nickname;
    }

    public Contact(String emailaddress) {

        _emailAddress = emailaddress;
    }

    @Override
    public String toString() {

        if(_fullName == null & _nickName == null) {

            //System.out.println("<" + _emailAddress + ">");
            return _emailAddress;
        }
        else {
            //System.out.println(_fullName + " (" + _nickName + ") " + "<" + _emailAddress + ">");
            return _fullName + " (" +  _nickName + ") " + "<" + _emailAddress + ">";
        }
    }

    public String getNickName() {

        return _nickName;
    }
}

如果任何人都可以提供任何指針,將不勝感激。 最終,現在我只測試看看搜索類是否可以搜索指定的昵稱,然后打印出該昵稱的返回值。 顯然,它應該返回第二個Contact(或者至少是意圖)。

問題發生在此驗證中:

 if(obj.getNickName().equals(searchName)) {
     return obj;
 }

似乎obj.getNickName()有時可能為null。

更改驗證順序:

public Contact search(String searchName) {

    for(Contact obj: al) {
        //I assume that searchName will never be null
        if(searchName.equals(obj.getNickName()) {
            return obj;
        }
    }
    return null;
}

您添加的第一項不包含昵稱。 在您的搜索中,您將獲得昵稱並在空引用上調用equals()。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM