2012-04-08 19 views
0

これは宿題です。連絡先を追加、表示、検索、削除するにはarraylist割り当てがあります。コードがコンパイルされ、deleteMatch()メソッドを除いて正しく機能するすべての正しいメソッドがあります。コンパイルして実行しますが、実際には私のarrayListから何も削除されません。一度やり直して入力を確認し、私が知っているヌルをチェックする必要がありますが、私はそれを簡単に行うことができます、私は最初に基礎を得ることを試みています。この方法の助けを借りていただければ幸いです。削除したArraylistからの削除の手助けが必要

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 

ご協力いただきありがとうございます。私はついにそれが働くようになった!ここでは、最終的なコードは次のとおりです。

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

動作するはずです。それがうまくいかないことをどのように知っていますか?連絡先リストに重複している可能性はありますか?リストの代わりにセットを使用する方が適切でしょうか? – emory

+3

1つのメソッドだけが失敗すると言っているときは、330行のコードを提供しています。それを* short *に編集してください。ただし、*問題を示す*完全なプログラムです。 –

+0

ConcurrentModificationExceptionを取得していませんか? – Fido

答えて

3

あなたは前年比は、単に新しい情報で新しい連絡先を作成してからちょうどarrayList.remove(contact_ob)を呼び出すことができ、個々のフィールドをチェックする必要がいけないequalsメソッドをオーバーライドしている場合は、それが存在する場合は削除されます。

あなたが使用している文字列を比較するためにもstring.toUpper()。equals(other_str);代わりにstring.equalsIgnoreCase(otherString)を使用して、大文字と小文字を区別せずに比較します。

+0

解決する最善の方法... – SenthilPrabhu

0

不正なオブジェクト(オブジェクト)を削除しようとしています。 インデックスまたはカウンタに基づいてオブジェクトを削除してください... Tisはあなたの問題を確実に解決します。

そして、そのいくつかのことがありますuはオブジェクトに基づいてobjctを削除しようとすると

これは

0

を今のあなたの問題を解決するため,,しかし、equalsメソッドをオーバーライドを考えると、オブジェクトを削除します間このコードで変更する必要があります。

1] EqualsIgnoreCaseと一致します。値を大文字または小文字に変換しないでください。これは、特定のケースを入力するようにユーザに制約を与えます。

2]入力中に既に入力された値が重複していないか確認する必要があります。

3]特定の連絡先を検索して削除すると、それを解除する必要があります。

4]常にContactオブジェクトを作成し、それをマッチに使用します。

関連する問題