Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 8872955
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: June 14, 20262026-06-14T18:20:43+00:00 2026-06-14T18:20:43+00:00

I have 3 classes: Main, ContactLibrary, and ContactInfo. ContactLibrary contains an ArrayList called myPhoneBook.

  • 0

I have 3 classes: Main, ContactLibrary, and ContactInfo.
ContactLibrary contains an ArrayList called myPhoneBook.
ContactInfo is made up of a bunch of strings containing name, address, etc.

The user wants to search for a name, for example, or anything involving input. The input is done from within the ContactLibrary and ContactInfo classes–both serializable objects.

I get a NPE error when it hits that point, however.

You have 3 entry(s) saved to disc.

Hello, and welcome to Team 6's contact list.
What would you like to do?
Enter the corresponding number of choice.

1: Add an entry to the contact list.
2: Print the entire contact list.
3: Search for a contact.
4: Exit the program.

Please enter a number from 1-4.
3
What would you like to search by?
Exception in thread "main" java.lang.NullPointerException
    at ContactLibrary.searchByCriteria(ContactLibrary.java:62)
    at Main.optionsPrompt(Main.java:62)
    at Main.main(Main.java:25)
1: Last Names.
2: Emails.
3: Zip codes.

What am I to do?

Here is my Main: http://ideone.com/uvfK4U (Contains the other two classes in the top comments)
Here is a UML diagram: https://i.stack.imgur.com/RG2YO.jpg

The ContactLibrary class, as requested:

/**
 * ContactLibrary, when constructed, creates an ArrayList of ContactLibrary
 * references called myPhoneBook. Every index is made to fill in objects
 * of ContactInfo, which contains entries and credentials.
 * 
 * Contains methods to create a new entry, search and print by criteria, and print list.
 */
import java.util.*;

public class ContactLibrary implements java.io.Serializable {
    private static final long serialVersionUID = 1L;
    private ArrayList<ContactInfo> myPhoneBook;
    private Scanner libraryInput = new Scanner(System.in);

    /** Constructs the ArrayList that will hold references to ContactInfo. */
    public ContactLibrary() {
        myPhoneBook = new ArrayList<ContactInfo>();
    }

    /**
     * Adds an entry to the ArrayList and utilizes the set methods in
     * ContactInfo.
     */
    public void addEntry() {
        int doAgain = 1;
        do {
            myPhoneBook.add(new ContactInfo());
            System.out.println("Would you like to enter another contact?");
            System.out.println("1: Yes.");
            System.out.println("2: No.");
            doAgain = libraryInput.nextInt();
        } while (doAgain == 1);
    }

    /**
     * Goes through every index in myPhoneBook and runs ArrayList.get() on them.
     */
    public void printList() {
        for (int i = 0; i < myPhoneBook.size(); i++) {
            System.out.println(myPhoneBook.get(i));
        }
    }

    /** Counts the number of objects within myPhoneBook and returns a string. */
    public String scanDisc() {
        int entryCount = myPhoneBook.size();
        return "You have " + entryCount + " entry(s) saved to disc.\n";
    }

    /**
     * The prompt for having the user search the database via criteria. Asks the
     * user to enter in their search criteria.
     */
    public void searchByCriteria() {
        String criteria;
        //libraryInput = new Scanner("System.in");
        int subSubMenuChoice = 0;
        System.out.println("What would you like to search by?");
        System.out.println("1: Last Names.");
        System.out.println("2: Emails.");
        System.out.println("3: Zip codes.");
        subSubMenuChoice = libraryInput.nextInt();
        switch (subSubMenuChoice) {
        case 1:
            System.out
                    .println("Please enter the last name you'd like to search for:");
            criteria = libraryInput.next();
            searchByLastName(criteria);
            break;
        case 2:
            System.out
                    .println("Please enter the e-mail you'd like to search for:");
            criteria = libraryInput.next();
            searchByEmail(criteria);
            break;
        case 3:
            System.out
                    .println("Please enter the zip code you'd like to search for:");
            criteria = libraryInput.next();
            searchByZip(criteria);
            break;
        default:
            System.out.println("Exiting");
            break;
        }
    }

    /**
     * Loops through every element in the array and returns a toString of that
     * index for comparing with the search criteria via contains().
     */
    public void searchByEmail(String criteria) {
        for (int i = 0; i < myPhoneBook.size(); i++) {
            if (criteria.compareTo((myPhoneBook.get(i)).getEmail()) == 0) {
                System.out.println(myPhoneBook.get(i));
            } else {
                System.out.print("");
            }
        }
    }

    /**
     * Loops through every element in the array and returns a toString of that
     * index for comparing with the search criteria via contains().
     */
    public void searchByLastName(String criteria) {
        for (int i = 0; i < myPhoneBook.size(); i++) {
            if (criteria.compareTo((myPhoneBook.get(i)).getLastName()) == 0) {
                System.out.println(myPhoneBook.get(i));
            } else {
                System.out.print("");
            }
        }
    }

    /**
     * Loops through every element in the array and returns a toString of that
     * index for comparing with the search criteria via contains().
     */
    public void searchByZip(String criteria) {
        for (int i = 0; i < myPhoneBook.size(); i++) {
            if (criteria.compareTo((myPhoneBook.get(i)).getZipcode()) == 0) {
                System.out.println(myPhoneBook.get(i));
            } else {
                System.out.print("");
            }
        }
    }

    /** Reorganizes the array in order by last name. */
    public void sortData() {
        Collections.sort(myPhoneBook);
    }

}
  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-06-14T18:20:44+00:00Added an answer on June 14, 2026 at 6:20 pm

    You are creating Multiple Scanner objects on the same inputStream, best you create only one and pass it on to the next class in the used methods or the constuctor of the class.

    Using multiple scanners on the same stream. Scanners can (and will) consume the stream — this may (will) lead to unexpected side-effects. Best not to do it.

    you can replace line 65 in your main class with:

    myLibrary.searchByCriteria(menuInput);
    

    delete the line: (in your class ContactLibrary)

    private Scanner libraryInput = new Scanner(System.in);
    
    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I have a file called main.py and a file called classes.py main.py contains the
I have 3 classes named maths, alphabets and main. The Maths Class contains Add
I have two classes; my Main class and a class called BlockPlace. I want
I have 2 classes 'Main' and 'FOR'. From 'Main' I will call method 'display'
I have 2 classes within same package. Both classes have main method in them.
Example: For(int i=0; i<4; i++) playSound(Sound.wav); I have the following classes: Main import java.io.IOException;
I have 4 main classes: House, Floor, Room, Asset. An asset is in a
I'd like to have two main classes (or more) with leiningen, and then be
Starting to learn Canvas and have two classes so far (main one to call
I have a main class and two extended classes: class Main { public $foo;

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.