Aus irgendeinem Grund in meiner Pseudo-Datenbank scheint meine Remove-Methode völlig ineffektiv und funktioniert nicht. Der Quellcode ist unter:Entfernen Methode funktioniert nicht in ArrayList
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;
}
}
Wenn ich versuche, ein Element aus der Arraylist zu entfernen, bleibt es nach wie vor in der Arraylist. Ich habe keine Ahnung warum, aber ich habe das Gefühl, dass meine Methode zum Entfernen etwas klobig ist.
Zum Beispiel mir ein Element hinzufügen und versuchen, es zu entfernen (Ausgabe siehe unten):
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.
Was könnte ich falsch hier tun?
Sie müssen die 'equals' Methode überschreiben und die Felder vergleichen. Wenn 'equals' nicht überschrieben wird, wird nur das Standardverhalten verwendet, das Referenzen vergleicht, keine Werte. – resueman
Sie haben in Ihrer 'Person' Klasse keine' equals() 'Methode definiert. – ajb
Übrigens, schauen Sie sich bitte an, wie man ein [MCVE] (http://stackoverflow.com/help/mcve) schreibt. Ihre Frage enthält eine große Menge redundanter Informationen. – ajb