2012-04-08 7 views
0

Ok, das ist Hausaufgaben. Ich habe eine arraylist Zuweisung zum Hinzufügen, Anzeigen, Suchen und Entfernen von Kontakten. Mein Code kompiliert und ich habe alle richtigen Methoden, die richtig funktionieren, mit Ausnahme der Methode deleteMatch(). Es kompiliert und läuft, aber entfernt nichts wirklich von meinem arrayList. Ich muss auch einmal zurückgehen und Eingaben validieren und nach Nullen suchen, die ich kenne, aber ich kann das leicht machen, ich versuche nur, die Grundlagen zuerst zu bekommen. Jede Hilfe mit dieser Methode würde sehr geschätzt werden.Brauchen Sie Hilfe löschen von Arraylist mit entfernen

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

public class ContactDatabase 
{ 
private ArrayList<Contact> contacts;  // ArrayList of contact 
private static final int QUIT = 0;   // Menu choices 
private static final int ADD = 1; 
private static final int LISTALL = 2; 
private static final int SEARCH = 3; 
private static final int DELETE = 4; 

/** 
* Default constructor - make a new ArrayList object with parameter type Contact,, 
*/ 
ContactDatabase() 
{  // Initialize the categories.// instantiate your ArrayList here 
    contacts = new ArrayList<Contact>(); 


} 

/** 
* inputContact inputs contact information from the keyboard. 
* It then stores this new contact in the contacts ArrayList. 
*/ 
public void inputContact() 
{ 
     Contact myContact; 

     Scanner input = new Scanner(System.in); 

     System.out.println("Please enter first name of new person"); 
     String first = input.nextLine(); 

     System.out.println("Please enter last name of new person"); 
     String last = input.nextLine(); 

     System.out.println("Please enter phone number xxxxxxxxxx"); 
     String phone = input.nextLine(); 

     System.out.println("Please enter e-mail"); 
     String email = input.nextLine(); 

     myContact = new Contact(first, last, phone, email); 
     contacts.add(myContact); 


     System.out.println("Details recorded:"); 
     System.out.println(contacts); 

} 

/** 
* displayAll iterates through the ArrayList of contacts and outputs each one 
* to the screen. 
*/ 
public void displayAll() 
{ 
    for (Contact entry : contacts) 
     System.out.println (entry); 

} 

/** 
* displayMatch inputs a keyword from the user. 
* It then iterates through the ArrayList of contacts and outputs each one 
* to the screen if the contact information contains the keyword. 
*/ 
public void displayMatch() 
{ 

    if(contacts.isEmpty()) 
     { 
      System.out.println("Sorry, there is no contact information to search."); 
     } 
    else 
     { 

      Scanner input = new Scanner(System.in); 
      System.out.print("Please enter the search keyword for or 0 to quit: "); 
      String search = input.next().trim().toUpperCase(); 
      if (search.equals("0") == false) 
       { 
        boolean found = false; 
        for(Contact a: contacts) 
         { 
          if((a.getFirst().toUpperCase().equals(search))||(a.getLast().toUpperCase().equals(search))||(a.getPhone().toUpperCase().equals(search))||(a.getEmail().toUpperCase().equals(search))) 
           { 
            System.out.println("that contact info is: "); 
            System.out.println("name: " + a.getFirst()); 
            System.out.println("name: " + a.getLast()); 
            System.out.println("phone number: " + a.getPhone()); 
            System.out.println("email: " + a.getEmail()); 
            found = true; 
           } 

          else 
           { 
            found = false; 
            System.out.println("Sorry, that contact can not be found!"); 
           } 
         } 
       } 
     } 
} 



/** 
* deleteMatch inputs a keyword from the user. 
* It then iterates through the ArrayList of contacts and asks the user 
* if the contact should be deleted, if the contact information contains the keyword. 
*/ 
public void deleteMatch() 
{ 
    if(contacts.isEmpty()) 
     { 
      System.out.println("Sorry, there is no contact information to search."); 
     } 
    else 
     { 

      Scanner input = new Scanner(System.in); 
      System.out.print("Please enter the search keyword for or 0 to quit: "); 
      String search = input.next().trim().toUpperCase(); 
      if (search.equals("0") == false) 
       { 
        boolean found = false; 
        for(Contact a: contacts) 
         { 
          if((a.getFirst().toUpperCase().equals(search))||(a.getLast().toUpperCase().equals(search))||(a.getPhone().toUpperCase().equals(search))||(a.getEmail().toUpperCase().equals(search))) 
           { 
            System.out.println("that contact info is: "); 
            System.out.println("name: " + a.getFirst()); 
            System.out.println("name: " + a.getLast()); 
            System.out.println("phone number: " + a.getPhone()); 
            System.out.println("email: " + a.getEmail()); 
            found = true; 
            Scanner inp = new Scanner(System.in); 
            System.out.println("Are you sure you would like to remove this contact?"); 
            String sure = inp.next().toUpperCase(); 
            if (sure.equals("YES")) 
            { 

             contacts.remove(a); 
             System.out.println("Contact removed... "); 
             displayAll(); 

            } 
            } 



          else 
           { 
            found = false; 
            System.out.println("Sorry, that contact can not be found!"); 
           } 
         } 
       } 
     } 
} 

// run through the array and look for an item that matches e 









    // get keyword input from user to be used in search 
    // run through list and look for any Contact that has 
    //  the keyword 
    // prompt user to make sure they want to delete the 
    //  (next/current) Contact you found 
    // if yes, delete the Contact 



// Main class 
public static void main(String[] args) 
{ 
    ContactDatabase cdb = new ContactDatabase(); 
    Scanner scan = new Scanner(System.in); 
    int choice = ADD; 

    // Main menu 
    while (choice != QUIT) 
    { 
     System.out.println(); 
     System.out.println("Choose from the following:"); 
     System.out.println("0) Quit"); 
     System.out.println("1) Add new contact"); 
     System.out.println("2) List all contacts"); 
     System.out.println("3) Search contacts by keyword and display"); 
     System.out.println("4) Search contacts by keyword and remove"); 
     choice = scan.nextInt(); 
     switch (choice) 
     { 
      case ADD: cdb.inputContact(); 
         break; 
      case LISTALL: cdb.displayAll(); 
         break; 
      case SEARCH: cdb.displayMatch(); 
         break; 
      case DELETE: cdb.deleteMatch(); 
         break; 
     } 
    } 
} 

    class Contact 
{ 
    private String first, last, phone, email; 

    /** 
    * Constructors. 
    */ 
    public Contact() 
    { 
    } 

    public Contact(String first, String last, String phone, String email) 
    { 
     this.first = first; 
     this.last = last; 
     this.phone = phone; 
     this.email = email; 
    } 

    /* 
    * Accessor Methods 
    */ 

    public String getFirst() 
    { 
     return first; 
    } 

    public String getLast() 
    { 
     return last; 
    } 

    public String getPhone() 
    { 
     return phone; 
    } 

    public String getEmail() 
    { 
     return email; 
    } 

    /* 
    * Mutator Methods 
    */ 
    public void setFirst(String first) 
    { 
     this.first = first; 
    } 

    public void setLast(String last) 
    { 
     this.last = last; 
    } 

    public void setPhone(String phone) 
    { 
     this.phone = phone; 
    } 

    public void setEmail(String em) 
    { 
     this.email = em; 
    } 



    /* 
    * Return all fields concatenated into a string 
    */ 
    public String toString() 
    { 
     return last + ", " + first + ". " + phone + ", " + email; 
    } 


    public boolean equals(Object otherObject) 
    { 
     if (otherObject ==null) 
     { 
     return false; 
     } 
     else if (getClass() != otherObject.getClass()) 
     { 
     return false; 
     } 
     else 
     { 
     Contact otherContact = (Contact)otherObject; 
     return (first.equals(otherContact.first) && 
       last.equals(otherContact.last)&& 
       phone.equals(otherContact.phone)&& 
       email.equals(otherContact.email)); 
     } 
    } 

} // end inner class, Contact 
} // end class, ContactDatabase 

Vielen Dank an alle für Ihre Hilfe. Ich habe es endlich zur Arbeit geschafft !!! Hier ist der endgültige Code:

import java.util.ArrayList; 
import java.util.Scanner; 
import java.util.regex.Matcher; 
import java.util.regex.Pattern; 

/** 
* The ContactDatabase class stores each contact in an arraylist. 
* Methods exist to add new contacts, search contacts, delete, and print contacts 
* to the console. 
*/ 
public class ContactDatabase 
{ 
private ArrayList<Contact> contacts;  // ArrayList of contact 
private static final int QUIT = 0;   // Menu choices 
private static final int ADD = 1; 
private static final int LISTALL = 2; 
private static final int SEARCH = 3; 
private static final int DELETE = 4; 

/** 
* Default constructor - make a new ArrayList object with parameter type Contact,, 
*/ 
ContactDatabase() 
{ 
    contacts = new ArrayList<Contact>(); 
} 
/** 
* inputContact inputs contact information from the keyboard. 
* It then stores this new contact in the contacts ArrayList. 
*/ 
public void inputContact() 
{ 
    Contact myContact; 
    String first = "null"; 
    String last = "null"; 
    String phone = "000-0000000"; 
    String email = "[email protected]"; 
    Scanner input = new Scanner(System.in); 

    while (true) 
    { 
     System.out.println("Please enter first name of new person"); 
     first = input.nextLine(); 
     if (first == null) 
     { 
      System.out.println("Sorry, first name cannot be null!"); 
     } 
     else 
     { 
     break; 
     } 
    } 

    while (true) 
    { 
     System.out.println("Please enter last name of new person"); 
     last = input.nextLine(); 
     if (first == null) 
     { 
      System.out.println("Sorry, last name cannot be null!"); 
     } 
     else 
     { 
     break; 
     } 
    } 

    while (true) 
    { 
     System.out.println("Please enter phone number 540-555-1212"); 
     String vphone = input.nextLine(); 
     Pattern pattern = Pattern.compile("\\d{3}-\\d{3}-\\d{4}"); 
     Matcher matcher = pattern.matcher(vphone); 
     if ((matcher.matches())|| vphone != null) 
     { 
      System.out.println("Thank you."); 
      phone = vphone; 
      break; 
     } 
     else 
     { 
      System.out.println("Sorry, that entry is incorrect or null"); 
     } 
    } 

    while (true) 
    { 
     System.out.println("Please enter e-mail [email protected]"); 
     String vemail = input.nextLine(); 
     Pattern pattern = Pattern.compile("[email protected]+\\.[a-z]+"); 
     Matcher matcher = pattern.matcher(vemail); 
     if ((matcher.matches())||(vemail != null)) 
     { 
      System.out.println("Thank you."); 
      email = vemail; 
      break; 
     } 
     else 
     { 
      System.out.println("Sorry, that entry is incorrect"); 
     } 
    } 

    myContact = new Contact(first, last, phone, email); 
    contacts.add(myContact); 

    System.out.println("Details recorded:"); 
    System.out.println(contacts); 

} 

/** 
* displayAll iterates through the ArrayList of contacts and outputs each one 
* to the screen. 
*/ 
public void displayAll() 
{ 
    System.out.println("Current contact list entries:"); 
    for (Contact entry : contacts) 
    System.out.println (entry); 
} 
/** 
* displayMatch inputs a keyword from the user. 
* It then iterates through the ArrayList of contacts and outputs each one 
* to the screen if the contact information contains the keyword. 
*/ 
public void displayMatch() 
{ 
    boolean found = false; 
    Scanner input = new Scanner(System.in); 
    System.out.print("Please enter the search keyword for or 0 to quit: "); 
    String search = input.next().trim().toUpperCase(); 
    if (search.equals("0") == false) 
    { 
     for(Contact a: contacts) 
     { 
      if((a.getFirst().toUpperCase().equals(search))||(a.getLast().toUpperCase().equals(search))||(a.getPhone().toUpperCase().equals(search))||(a.getEmail().toUpperCase().equals(search))) 
      { 
       System.out.println("that contact info is: "); 
       System.out.print("name: " + a.getFirst()); 
       System.out.println(" " + a.getLast()); 
       System.out.println("phone number: " + a.getPhone()); 
       System.out.println("email: " + a.getEmail()); 
       found = true; 
      } 
      if(contacts.isEmpty()) 
      { 
       System.out.println("Sorry, there is no contact information to search."); 
      } 
     } 
    } 
    if (found == false) 
    { 
     System.out.println("Sorry, no such contact"); 
    } 
} 
/** 
* deleteMatch inputs a keyword from the user. 
* It then iterates through the ArrayList of contacts and asks the user 
* if the contact should be deleted, if the contact information contains the keyword. 
*/ 
public void deleteMatch() 
{ 
    for (int i=0; i< contacts.size(); i++) 
    { 
     displayMatch(); 
     Scanner inp = new Scanner(System.in); 
     System.out.println("Are you sure you would like to remove this contact?"); 
     String sure = inp.next().toUpperCase(); 
     if (sure.equals("YES")) 
     { 
      contacts.remove(i); 
      System.out.println("Thank you. Contact removed."); 
      displayAll(); 
     } 
    } 
} 

// Main class 
public static void main(String[] args) 
{ 
    ContactDatabase cdb = new ContactDatabase(); 
    Scanner scan = new Scanner(System.in); 
    int choice = ADD; 

    // Main menu 
    while (choice != QUIT) 
    { 
     System.out.println(); 
     System.out.println("Choose from the following:"); 
     System.out.println("0) Quit"); 
     System.out.println("1) Add new contact"); 
     System.out.println("2) List all contacts"); 
     System.out.println("3) Search contacts by keyword and display"); 
     System.out.println("4) Search contacts by keyword and remove"); 
     choice = scan.nextInt(); 
     switch (choice) 
     { 
      case ADD: cdb.inputContact(); 
         break; 
      case LISTALL: cdb.displayAll(); 
         break; 
      case SEARCH: cdb.displayMatch(); 
         break; 
      case DELETE: cdb.deleteMatch(); 
         break; 
     } 
    } 
} 

/** 
* The inner class, Contact, stores the details for a single contact. 
* There is no error checking on any of the input. Whatever string is 
* passed in for a given attribute is accepted. 
*/ 
class Contact 
{ 
    private String first, last, phone, email; 

    /** 
    * Constructors. 
    */ 
    public Contact() 
    { 
    } 

    public Contact(String first, String last, String phone, String email) 
    { 
     this.first = first; 
     this.last = last; 
     this.phone = phone; 
     this.email = email; 
    } 

    /* 
    * Accessor Methods 
    */ 

    public String getFirst() 
    { 
     return first; 
    } 

    public String getLast() 
    { 
     return last; 
    } 

    public String getPhone() 
    { 
     return phone; 
    } 

    public String getEmail() 
    { 
     return email; 
    } 

    /* 
    * Mutator Methods 
    */ 
    public void setFirst(String first) 
    { 
     this.first = first; 
    } 

    public void setLast(String last) 
    { 
     this.last = last; 
    } 

    public void setPhone(String phone) 
    { 
     this.phone = phone; 
    } 

    public void setEmail(String em) 
    { 
     this.email = em; 
    } 



    /* 
    * Return all fields concatenated into a string 
    */ 
    public String toString() 
    { 
     return last + ", " + first + ". " + phone + ", " + email; 
    } 


    public boolean equals(Object otherObject) 
    { 
     if (otherObject ==null) 
     { 
     return false; 
     } 
     else if (getClass() != otherObject.getClass()) 
     { 
     return false; 
     } 
     else 
     { 
     Contact otherContact = (Contact)otherObject; 
     return (first.equals(otherContact.first) && 
       last.equals(otherContact.last)&& 
       phone.equals(otherContact.phone)&& 
       email.equals(otherContact.email)); 
     } 
    } 

} // end inner class, Contact 
} // end class, ContactDatabase 
+0

Es sieht aus wie es funktionieren sollte. Woher weißt du, dass es nicht funktioniert? Ist es möglich, dass Du Duplikate in Deiner Kontaktliste hast? Wäre es angemessener, ein Set anstelle einer Liste zu verwenden? – emory

+3

Sie haben 330 Codezeilen bereitgestellt, wenn Sie sagen, dass nur eine Methode fehlschlägt. Bitte bearbeiten Sie es zu einem * kurzen * aber kompletten Programm welches * nur * das Problem demonstriert. –

+0

Erhalten Sie keine ConcurrentModificationException? – Fido

Antwort

3

Wenn Sie die equals überschrieben haben Methode, die Sie brauchen nicht für einzelne Felder zu überprüfen, yoy einfach einen neuen Kontakt mit neuen Informationen erstellen und dann rufen Sie einfach arrayList.remove (contact_ob); Es wird entfernt, wenn es existiert,

auch für den Vergleich Zeichenfolge verwenden Sie string.toUpper(). equals (other_str); stattdessen können Sie string.equalsIgnoreCase (otherString) verwenden, wird unabhängig von dem Fall

+0

beste lösung ... – SenthilPrabhu

0

Sie versuchen, (Objekt) zu entfernen, die nicht korrekt ist. Entfernen Sie das Objekt basierend auf dem Index oder Zähler ... Dies wird Ihr Problem sicher lösen.

Und zwischen wenn u versuchen, den objct basierend auf dem Objekt

Diese Ihr Problem über das Überschreiben der Methode equals für jetzt ,, aber denken Sie lösen zu entfernen, und entfernen Sie das Objekt

0

paar Dinge gibt, die Sie müssen diesen Code ändern.

1] Übereinstimmung mit equalsIgnoreCase. Konvertieren Sie niemals einen Wert in Groß- oder Kleinschreibung und passen Sie ihn dann an. Es beschränkt den Benutzer auf die Eingabe eines bestimmten Falls.

2] Während der Eingabe müssen Sie nach doppelten Werten suchen, die bereits eingegeben wurden.

3] Sie müssen brechen, sobald Sie nach einem bestimmten Kontakt gesucht und ihn entfernt haben.

4] Erstellen Sie immer ein Kontaktobjekt und verwenden Sie es dann für die Übereinstimmung.