0

For some reason, in my Pseudo database, my remove method seems to be completely ineffective and isn't working. The source code is below:

import java.util.ArrayList;
import java.util.Scanner;

public class Lab2 {
    static ArrayList<Person> peopleDirectory = new ArrayList<Person>(10);

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int choice;

        Scanner userInput = new Scanner(System.in);

        do {
            System.out.println("Welcome to the people directory please make a choice from the list below:");
            System.out.println("-------------------------------------------------------------------------");
            System.out.println("1. Add a person to the directory.");
            System.out.println("2. Remove a Person from the directory.");
            System.out.println("3. View the User Directory.");
            System.out.println("4. Exit the directory.");
            choice = userInput.nextInt();
            switch(choice) {
            case 1: 
                    addPerson(new Person());
                    break;
            case 2: removePerson(new Person());
                    break;
            case 3: displayPeople();
                    break;
            case 4: System.out.println("Thanks for using the people diretory!");
                    System.exit(0);
                    break;
            default: System.out.println("Invalid choice! Please select a valid choice!");
                    break;

            }
        } while (choice != 4);
    }

    public static void addPerson(Person thePerson) {
        String firstName;
        String lastName;
        String phoneNumber;
        int age;
        if (peopleDirectory.size() >= 10) {
            System.out.println("Sorry the list can not be larger than 10 people");
        } else {
            int i = 0;
            Scanner input = new Scanner(System.in);
            System.out.println("Enter the first name of the Person you would like to add: ");
            firstName = input.nextLine();
            thePerson.setFirstName(firstName);
            System.out.println("Enter the last name of the Person you would like to add: ");
            lastName = input.nextLine();
            thePerson.setLastName(lastName);
            System.out.println("Enter the phone number of the Person you would like to add: ");
            phoneNumber = input.nextLine();
            thePerson.setPhoneNumber(phoneNumber);
            System.out.println("Enter the age of the Person you would like to add: ");
            age = input.nextInt();
            thePerson.setAge(age);
            peopleDirectory.add(i, thePerson);

            i++;
        }



    }

    public static void removePerson(Person thePerson) {
        if (peopleDirectory.size() < 1) {
            System.out.println("There is absolutely nothing to remove from the Directory");
        } 


        else {
            Scanner input = new Scanner(System.in);
            System.out.println("Please enter the first name of the person you would like to delete: ");
            String firstName = input.nextLine();
            thePerson.setFirstName(firstName);
            System.out.println("Enter the last name of the Person you would like to remove: ");
            String lastName = input.nextLine();
            thePerson.setLastName(lastName);
            System.out.println("Enter the phone number of the Person you would like to remove: ");
            String phoneNumber = input.nextLine();
            thePerson.setPhoneNumber(phoneNumber);
            System.out.println("Enter the age of the Person you would like to remove: ");
            int age = input.nextInt();
            thePerson.setAge(age);
            for (int i = 0; i < peopleDirectory.size(); i++) {
                if (peopleDirectory.get(i).equals(thePerson)) {
                    peopleDirectory.remove(thePerson);
                }
            }

        }
    }

    public static void displayPeople() {
        for (Person person : peopleDirectory) {
            System.out.println("First Name: " + person.getFirstName() + " Last name: " + 
                            person.getLastName() + " Phone number: " + person.getPhoneNumber() + 
                            " Age: " + person.getAge());
        }
    }



}

class Person {
    private String firstName;
    private String lastName;
    private int age;
    private String phoneNumber;

    public Person (String firstName, String lastName, int personAge, String phoneNumber) {
        this.firstName = firstName;
        this.lastName = lastName;
        this.age = personAge;
        this.phoneNumber = phoneNumber;
    }

    public Person() {
        this.firstName = "";
        this.lastName = "";
        this.age = 0;
        this.phoneNumber = "";
    }

    public int getAge() {
        return this.age;
    }

    public String getFirstName() {
        return this.firstName;
    }

    public String getLastName() {
        return this.lastName;
    }

    public String getPhoneNumber() {
        return this.phoneNumber;
    }


    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public void setPhoneNumber(String phoneNumber) {
        this.phoneNumber = phoneNumber;
    }
}

When I attempt to remove an element from the ArrayList, it still remains in the arrayList. I have no idea why, but I feel as if my remove method is a bit clunky.

For instance I add an element and attempt to remove it (see output below):

Welcome to the people directory please make a choice from the list below: 
------------------------------------------------------------------------- 
1. Add a person to the directory. 
2. Remove a Person from the directory. 
3. View the User Directory. 
4. Exit the directory. 
1 
Enter the first name of the Person you would like to add: 
Tom 
Enter the last name of the Person you would like to add: 
Jones 
Enter the phone number of the Person you would like to add: 
6073388152 
Enter the age of the Person you would like to add: 
24 
Welcome to the people directory please make a choice from the list below: 
------------------------------------------------------------------------- 
1. Add a person to the directory. 
2. Remove a Person from the directory. 
3. View the User Directory. 
4. Exit the directory. 
3 
First Name: Tom Last name: Jones Phone number: 6073388152 Age: 24 
Welcome to the people directory please make a choice from the list below: 
------------------------------------------------------------------------- 
1. Add a person to the directory. 
2. Remove a Person from the directory. 
3. View the User Directory. 
4. Exit the directory. 
2 
Please enter the first name of the person you would like to delete: 
Tom 
Enter the last name of the Person you would like to remove: 
Jones 
Enter the phone number of the Person you would like to remove: 
6073388152 
Enter the age of the Person you would like to remove: 
24 
Welcome to the people directory please make a choice from the list below: 
------------------------------------------------------------------------- 
1. Add a person to the directory. 
2. Remove a Person from the directory. 
3. View the User Directory. 
4. Exit the directory. 
3 
First Name: Tom Last name: Jones Phone number: 6073388152 Age: 24 
Welcome to the people directory please make a choice from the list below: 
------------------------------------------------------------------------- 
1. Add a person to the directory. 
2. Remove a Person from the directory. 
3. View the User Directory. 
4. Exit the directory. 

What could I be doing wrong here?

halfer
  • 19,824
  • 17
  • 99
  • 186
Linuxn00b
  • 151
  • 2
  • 12
  • 1
    You need to override the `equals` method and compare the fields. If `equals` isn't overridden, it just uses the default behavior which compares references, not values. – resueman Sep 12 '16 at 01:23
  • You didn't define an `equals()` method in your `Person` class. – ajb Sep 12 '16 at 01:23
  • 1
    By the way, please look into how to write an [MCVE](http://stackoverflow.com/help/mcve). Your question contains a huge amount of redundant information. – ajb Sep 12 '16 at 01:24
  • 1
    I don't see the purpose of passing in a `new Person` into the functions. Either build the person outside the function, and pass that in or construct inside – OneCricketeer Sep 12 '16 at 01:25

1 Answers1

0

if you want to compare objects should have something like this, complete answer here here !

public boolean equals(Object object2) {
  return object2 instanceof MyClass && a.equals(((MyClass)object2).a);
}

or could compare for any specific field of its objects for example

if(peopleDirectory.get(i).getFirstName().equals(thePerson.getFirstName()))

*no need to send a parameter a new Person () could work with a single object class level and only modify their attributes with its setter when you want to perform some operation

nor declare as many Scanner objects if you can work with one for example *

static Scanner userInput = new Scanner(System.in);

to work with a single object could be something

static Person person = new Person();//declaration

and its method add or remove when requesting data entry setteas object attributes created and comparison also perform based on that object

System.out.println("Enter the first name of the Person you would like to add: ");
        person.setFirstName(userInput.nextLine());//data entry and setteo 

if (peopleDirectory.get(i).equals(person)) // comparation
Community
  • 1
  • 1
Dev. Joel
  • 1,127
  • 1
  • 9
  • 14