2

双方向リンク リストの検索方法を検討中です。例外が発生していますが、それらを取得せずにリストをトラバースする方法がわかりません..

    public void searchEntryNode() {
    System.out.println("I'll search through each entry to pull up what you're looking for ");
    System.out.println("Type in what you want ");
    String searchEntry = keyboard.next();

    EntryNode n = head;
    while (head != null) {
        if (head.getFirstName().contains(searchEntry) || head.getLastName().contains(searchEntry) || head.getPhoneNum().contains(searchEntry) || head.getEmail().contains(searchEntry)) { 
            System.out.println("Found a matching entry");
            System.out.println(n.getFirstName() + " " + n.getLastName() + " " + n.getEmail() + " " + n.getPhoneNum());
        }

        if (head.getNext() != null) {
            head = head.getNext();
        }   
        else {
                System.out.println("That's all we found ");
                System.out.println();
                menu();
        }
    }
}
4

1 に答える 1

2

私はあなたの行数を持っていないので、ここではやみくもに推測していますが、この行があなたの問題であると推測します:

if (head.getFirstName().contains(searchEntry) || head.getLastName().contains(searchEntry) || head.getPhoneNum().contains(searchEntry) || head.getEmail().contains(searchEntry))

エントリの 1 つが、、、またはnullのいずれかを返す可能性があります。getFirstNamegetLastNamegetPhoneNumgetEmail

逆参照する前に、それぞれが is not であることを確認するnull必要があります (実行できませんnull.someMethod()) 。

これを行う1つの方法:

string firstName = head.getFirstName();
string lastName = head.getLastName();
string phoneNum = head.getPhoneNum();
string email = head.getEmail();

if ((firstName != null && firstName.contains(searchEntry)) 
     || (lastName != null && lastName.contains(searchEntry)) 
     || (phoneNum != null && phoneNum.contains(searchEntry)) 
     || (email != null && email.contains(searchEntry)))
于 2012-03-04T23:37:04.060 に答える