2016-09-12 2 views
0

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?

+1

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

+0

Sie haben in Ihrer 'Person' Klasse keine' equals() 'Methode definiert. – ajb

+1

Ü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

Antwort

0

wenn Sie Objekte vergleichen sollte hier so etwas wie dieses, vollständige Antwort haben here !

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

oder für einen bestimmten Bereich seiner Objekte zum Beispiel

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

* keine Notwendigkeit vergleichen könnte sende einen Parameter eine neue Person() könnte mit einer einzelnen Objektklassenebene arbeiten und ihre Attribute nur dann mit ihrem Setter ändern, wenn sie eine Operation ausführen wollen

noch so viele Scanner Objekte deklarieren, wenn Sie mit einem zum Beispiel arbeiten können *

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

mit einem einzigen Objekt, etwas

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

und seine Methode hinzufügen oder entfernen können zu arbeiten, wenn die Dateneingabe anfordert Setteas Objektattribute erstellt und Vergleich auch basierend auf diesem Objekt durchführen

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 
+0

Ich bin nicht ganz sicher, was Sie meinen, indem ich nicht einen Parameter eine neue Person senden muss(), wie würden Sie es anders machen? – Linuxn00b

+0

@ Linuxn00b - Sie können die 'neue Person()' ** innerhalb ** der Methode erstellen und entfernen Sie den Parameter –

+0

aktualisieren Sie meine Antwort oder Sie könnten den Ratschlag von @ Linuxn00b folgen –

Verwandte Themen