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?

4
  • 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. Commented Sep 12, 2016 at 1:23
  • You didn't define an equals() method in your Person class. Commented Sep 12, 2016 at 1:23
  • 1
    By the way, please look into how to write an MCVE. Your question contains a huge amount of redundant information. Commented Sep 12, 2016 at 1: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 Commented Sep 12, 2016 at 1:25

1 Answer 1

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 
Sign up to request clarification or add additional context in comments.

3 Comments

I'm not quite sure what you mean by I don't need to send a parameter a new Person(), how would you do it differently?
@Linuxn00b - you can create the new Person() inside the method and remove the parameter
update my answer or you could follow the advice of @Linuxn00b

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.