1

I'm trying to write some code that uses a Scanner input to ask for a LibraryPatron's name and use the contains() method I have to check if the LibraryPatron is part of the list. I am not having issues regarding how the contains() method works, but rather how to use it to check based off of the object's name. Thanks in advance.

Here is my LinkedList class (called BagList in this case), which already has a contains() method:

package libraryPatrons;

public final class BagList<T> implements BagInterface<T> {

    Node firstNode;
    int numPatrons;

    public BagList() {
        firstNode = null;
        numPatrons = 0;
    }

    public int getCurrentSize() { 
        return numPatrons; 
    }

    /** Sees whether this bag is empty.   
      * @return  True if the bag is empty, or false if not. */
    public boolean isEmpty() { 
        return firstNode == null; 
    }

    /** Adds a new entry to this bag.   
      * @param newEntry  The object to be added as a new entry.  
      * @return  True if the addition is successful, or false if not. */
    public boolean add(T newEntry) { 
        Node newNode = new Node (newEntry);
        newNode.next = firstNode;
        firstNode = newNode;
        ++numPatrons;
        return true;
    }

    /** Removes one unspecified entry from this bag, if possible.
      * @return  The removed entry if the removal was successful, or null. */
    public T remove() { 
        T result = null;
        if (firstNode != null) {
            result = firstNode.data;
            firstNode = firstNode.next;
            --numPatrons;
        }
        return result;
    }

    private Node getReferenceTo (T anEntry) {
        Node currentNode = firstNode;
        boolean found = false;
        while (!found && currentNode != null) {
            if (anEntry.equals(currentNode.data)) {
                found = true;         
            } else {
                currentNode = currentNode.next;
            }
        }
        return currentNode;
    }

    /** Removes one occurrence of a given entry from this bag.
      * @param anEntry  The entry to be removed.
      * @return  True if the removal was successful, or false if not. */
    public boolean remove(T anEntry) { 
        boolean result = false;
        Node currentNode = getReferenceTo (anEntry);
        if (currentNode != null) {
            currentNode.data = firstNode.data;
            firstNode = firstNode.next;
            --numPatrons;
            result = true;
        } 
        return result;
    }

    /** Removes all entries from this bag. */
    public void clear() {
        while (!isEmpty()) {
            remove();
        }
        numPatrons = 0;
    }

    /** Counts the number of times a given entry appears in this bag.   
      * @param anEntry  The entry to be counted.   
      * @return  The number of times anEntry appears in the bag. */
    public int getFrequencyOf(T anEntry) { 
        Node currentNode = firstNode;
        int frequency = 0;
        while (currentNode != null) {
            if (anEntry.equals(currentNode.data))
                ++frequency;
            currentNode = currentNode.next;
        }
        return frequency;
    }

    /** Tests whether this bag contains a given entry.   
      * @param anEntry  The entry to locate.   
      * @return  True if the bag contains anEntry, or false if not. */
    public boolean contains(T anEntry) { 
        Node currentNode = getReferenceTo (anEntry);
        return !(currentNode == null);
    }

    /** Retrieves all entries that are in this bag.   
      * @return  A newly allocated array of all the entries in the bag.
      * Note: If the bag is empty, the returned array is empty. */
    public T[] toArray() { 
        T[] newArray = (T[]) new Object[numPatrons];
        int index = 0;
        Node currentNode = firstNode;
        while (currentNode != null) {
            newArray[index] = currentNode.data;
            ++index;
            currentNode = currentNode.next;
        }
        return newArray;
    }

    private class Node {
        private T data;
        private Node next;

        private Node (T dataPortion) {
            this(dataPortion, null);
        }

        private Node (T dataPortion, Node nextNode) {
            this.data = dataPortion;
            this.next = nextNode;
        }
    }
}

Here is my Main class:

package libraryPatrons;
import java.util.Scanner;

class Main {
    public static void main (String args[]) {               
        LibraryPatron patron1 = new LibraryPatron("Bob", "3814872910", "Adelaide Way", "Belmont", "94002");
        LibraryPatron patron2 = new LibraryPatron("Les", "3860165016", "Chevy St", "Belmont", "94002");
        LibraryPatron patron3 = new LibraryPatron("Anna", "7926391055", "Davey Glen Rd", "Belmont", "94002");
        LibraryPatron patron4 = new LibraryPatron("Amy", "7619356016", "Fernwood Way", "Belmont", "94002");
        LibraryPatron patron5 = new LibraryPatron("Tom", "1758563947", "Flasner Ln", "Belmont", "94002");
        LibraryPatron patron6 = new LibraryPatron("James", "4729573658", "Marsten Ave", "Belmont", "94002");
        LibraryPatron patron7 = new LibraryPatron("Jason", "3858239773", "Middlesex Rd", "Belmont", "94002");
        LibraryPatron patron8 = new LibraryPatron("Jess", "3866392656", "Oxford Ct", "Belmont", "94002");
        LibraryPatron patron9 = new LibraryPatron("Mike", "7836591904", "Sem Ln", "Belmont", "94002");
        LibraryPatron patron10 = new LibraryPatron("Abby", "1960265836", "Tioga Way", "Belmont", "94002");
        LibraryPatron patron11 = new LibraryPatron("Dom", "5917485910", "Village Dr", "Belmont", "94002");
        LibraryPatron patron12 = new LibraryPatron("Wes", "5810385736", "Willow Ln", "Belmont", "94002"); 

        BagList<LibraryPatron> listOfPatrons = new BagList<LibraryPatron>();

        listOfPatrons.add(patron1);
        listOfPatrons.add(patron2);
        listOfPatrons.add(patron3);
        listOfPatrons.add(patron4);
        listOfPatrons.add(patron5);
        listOfPatrons.add(patron6);
        listOfPatrons.add(patron7);
        listOfPatrons.add(patron8);
        listOfPatrons.add(patron9);
        listOfPatrons.add(patron10);
        listOfPatrons.add(patron11);
        listOfPatrons.add(patron12);

        Scanner patronInput = new Scanner(System.in);
        String name = patronInput.nextLine();
        System.out.println("Does this list of library patrons contain: " + name + "?");
        System.out.println(/* contains(objectName)? */);
    }
}

In the main() function, I want to ask for a LibraryPatron's name and use the contains() method I have to check if the LibraryPatron is part of the list.

  • Check this out :https://stackoverflow.com/questions/8322129/arraylists-custom-contains-method – codeLover Sep 12 '18 at 05:55
  • How would I be able to get objects to check based on just the user input, which will be the object's name (string)? Hopefully this makes sense, thank you – Camille Dunning Sep 12 '18 at 06:26
  • The core is to overrider hascode and equals method, you can clearly view that help in the link I have shared. Please go through the solution thoroughly – codeLover Sep 12 '18 at 06:28

0 Answers0