我希望能够使用ContactArrayList类的Contact从联系人列表中显示信息。

我有一个ContactArrayList类,其中包含一个Contact类对象。在ContactArrayList类中,我有一个addremovesizeisEmpty等。该类的方法,该方法将与ContactArrayList类中的该ContactArrayList一起使用。

在我的main / driver类中,我有一个ContactArrayList类的对象,并创建了一个“用户”对象和Contact类的几个“罐头”对象。

我的问题:

当用户选择显示所有联系人的信息,包括固定对象和用户对象时,我尝试使用增强的for循环W / toString类的ContactArrayList方法,但是因为我使用的是增强的for循环,当我想使用ContactContact时,一个toString类“迭代器”变量可以通过并显示使用ContactArrayList toString的信息。

ContactArrayList

import java.util.ArrayList;

public class ContactArrayList
{
    ArrayList <Contact> contactArray = new ArrayList <Contact> ();

    String toStringM = " ";

    public Contact set(int index, Contact element)
    {
         return contactArray.set(index, element);
    }

    public Boolean add(Contact element)
    {
         return contactArray.add(element);
    }

    public Contact remove(int index)
    {
         return contactArray.remove(index);
    }

    public int size()
    {
         return contactArray.size();
    }

    public void clear()
    {
          contactArray.clear();
    }

    public boolean isEmpty()
    {

         return contactArray.isEmpty();
    }

    @Override
    public String toString()
    {
        for(int i = 0; i < contactArray.size(); i++)
        {
           toStringM = "Displaying all contacts and information: "
            + contactArray.get(i).getName() +
            contactArray.get(i).getLastName() +
            contactArray.get(i).getPhoneNumber()+
            contactArray.get(i).getEmailAddress();
        }

      return toStringM;

    }

    public void sort()
    {
        ArrayList <Contact> tempSort = new ArrayList <> ();

        while(!contactArray.isEmpty())
        {
            int index = 0;
            for (int i = 1; i < contactArray.size(); i++)
            {
                if(contactArray.get(i).compareTo(contactArray.get(index)) == -1)
                 {
                    index = i;
                 }
            }

            tempSort.add(contactArray.get(index));

            contactArray.remove(index);
        }

        contactArray = tempSort;
    }

    public void addContact(String passedString)
    {
        ArrayList <Contact> addContact = new ArrayList <Contact> ();

       for(Contact c : contactArray)
       {
          if (c.getName().indexOf(passedString) > -1)
          {
                  addContact.add(c);
          }
       }


    }

    public void searchAndRemove (String passedString)
    {
       for(int i = 0; i < contactArray.size(); i++)
       {
          if (contactArray.get(i).getName().indexOf(passedString) > -1)
          {
                 contactArray.remove(i);
          }
       }

    }

}


Main

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

public class HomeWork10 {

    public static void main(String[] args)
    {
        userInput();
    }

    public static void userInput()
    {
        Scanner in = new Scanner(System.in);
        ContactArrayList   cal1 = new ContactArrayList ();
        Contact c1 = new Contact(); //User Input Object

        //"Canned" refernce Objects
        Contact c2 = new Contact("James", "Conney", "7608949843",
                                 "[email protected]");
        Contact c3 = new Contact("JJ", "Jim", "7608939836",
                                 "[email protected]");
        Contact c4 = new Contact("Jimmer", "ConBoy", "7608040500",
                                 "[email protected]");
        //Adding canned objects to the ArrayList
        cal1.add(c2);
        cal1.add(c3);
        cal1.add(c4);

        String name = " ";
        String lastName = " ";
        String phoneNumber = " ";
        String emailAddress = " ";
        String yesOrNo = " ";
        int userInput = 0;
        boolean userContinues = true;

        do
        {
            System.out.println("Please enter 1, 2, 3, 4, or 5 for the following"
                               + " options");
            System.out.println("1. Add a new Contact, 2. display all contacts, "
                              + "3. search for a contact and remove them,"
                              + " 4. Sort the Contact LIST by name, 5. Quit: ");
            userInput = in.nextInt();
            in.nextLine();
            switch(userInput)
            {

                case 1:

                        System.out.println("Please enter the new contact info"
                                 + "(Name, lastName, phoneNumber and emailAddress): ");
                       name = in.nextLine();
                       lastName = in.nextLine();
                       phoneNumber = in.nextLine();
                       emailAddress = in.nextLine();

                       c1 = new Contact(name, lastName, phoneNumber, emailAddress);
                       cal1.add(c1);
                       break;
                case 2:

                    System.out.println(cal1.toString());
                    break;

                case 3:
                    System.out.println("Enter a contact to search for and remove: ");

                    name = in.nextLine();
                    cal1.searchAndRemove(name);
                    break;

                case 4:
                    System.out.println("Sorting the contact list by name "
                                       + "and displaying it to the screen.");
                    cal1.sort();
                    System.out.println(cal1.toString());


                    break;

                case 5:
                    System.out.println("Goodbye");
                    System.exit(0);
                       break;

                default:
                    System.out.println("Invalid entry, try again.");

                    break;
           }

                System.out.println("Would you like to continue ? (Y/N): ");
                yesOrNo = in.next();

                if(yesOrNo.equalsIgnoreCase("Y"))
                {
                    System.out.println("");
                }
                else
                {
                    System.out.println("Goodbye");
                    userContinues = false;
                }


        }while(userContinues);



    }

}


Contact

import java.util.Scanner;

public class Contact implements Comparable
{

    private static String name = " ";

    private static String lastName = " ";
    private static String phoneNumber = " ";
    private static String emailAddress = " ";

    public Contact()
    {
        //Default constructor
    }

    public Contact(String passedName, String passedLastName,
                   String passedPhoneNumber, String passedEmailAddress)
    {
        this.name = passedName;
        this.lastName = passedLastName;
        this.phoneNumber = passedPhoneNumber;
        this.emailAddress = passedEmailAddress;
    }

    //Setter Methods
    public void setName(String passedName)
    {
        this.name = passedName;
    }
    public void setLastName(String passedLastName)
    {
         this.lastName = passedLastName;
    }
    public void setPhoneNumber(String passedPhoneNumber)
    {
        this.phoneNumber = passedPhoneNumber;
    }
    public void setEmailAddress(String passedEmailAddress)
    {
        this.emailAddress = passedEmailAddress;
    }
    //Getter Methods

    public String getName()
    {
        return this.name;
    }
    public String getLastName()
    {
        return this.lastName;
    }
    public String getPhoneNumber()
    {
        return this.phoneNumber;
    }
    public String getEmailAddress()
    {
        return this.emailAddress;
    }
    //Methods

    public String toString()
    {
        return "Name, Last name, phone number, and email in order: "
             + this.name +" " + this.lastName + " " + this.phoneNumber +
             " " + this.emailAddress;
    }


    public int compareTo(Object other)
    {
        Contact passedContact = (Contact) other;
        if(this.lastName.compareTo(passedContact.lastName) == 0)
        {
             return this.name.compareTo(passedContact.name);
        }
        else
        {
            return this.lastName.compareTo(passedContact.lastName);
        }

    }

    public static String userInput()
    {
        Scanner in = new Scanner(System.in);
        System.out.println("Please enter your name, last name,"
                           + " phone number, and email address: ");
        Contact.name = in.nextLine();
        Contact.lastName = in.nextLine();
        Contact.phoneNumber= in.nextLine();
        Contact.emailAddress = in.nextLine();

        Contact newContact = new Contact(name, lastName, phoneNumber, emailAddress);

        return newContact.getName() + newContact.getLastName() +
               newContact.getPhoneNumber() + newContact.getEmailAddress();

    }

     public boolean equals(Object anObject)
    {
    //equals method which trys to check if the object to be ,ade is legdible
        if (anObject == null || getClass() != anObject.getClass())
        {
            return false ;
        }
        Contact otherContact = (Contact) anObject ;

        return (this.name.equals(otherContact.getName())) &&
                this.lastName.equals(otherContact.getLastName()) &&
                this.phoneNumber.equals(otherContact.getPhoneNumber()) &&
                this.emailAddress.equals(otherContact.getEmailAddress());
    }
}


输出:


Please enter 1, 2, 3, 4, or 5 for the following options
1. Add a new Contact, 2. display all contacts, 3. search for a contact and remove them, 4. Sort the Contact LIST by name, 5. Quit:

1
Please enter the new contact info(Name, lastName, phoneNumber and emailAddress):
Mike

Dim

123456789

email

Would you like to continue ? (Y/N):
y

Please enter 1, 2, 3, 4, or 5 for the following options

1. Add a new Contact, 2. display all contacts, 3. search for a contact and remove them, 4. Sort the Contact LIST by name, 5. Quit:

2
Name, Last name, phone number, and email in order: Mike Dim 123456789 email

Name, Last name, phone number, and email in order: Mike Dim 123456789 email

Name, Last name, phone number, and email in order: Mike Dim 123456789 email

Name, Last name, phone number, and email in order: Mike Dim 123456789 email

Would you like to continue ? (Y/N):



总的来说,我将继续努力解决这个问题,这可能很简单,但希望有人指出这一点。如果您需要有关ContactArrayList类,Contact类或Main / driver类的更多信息,请告诉我!

最佳答案

感谢您提供缺少的课程。
问题出在您的Contact类中:

private static String name = " ";
private static String lastName = " ";
private static String phoneNumber = " ";
private static String emailAddress = " ";


这些变量都是static,这意味着每个Contact都不存在一次,而是每个Application一次。因此,所有Contact将共享相同的namelastName等。

如果删除static修饰符,它将起作用。

但是您的代码中还有其他一些要解决的问题:


不要这样称呼您的ContactArrayList。其他开发人员会查看它,并期望它扩展ArrayList,而不会。只需将其命名为Contacts,就更好了(我在这里将其称为表单)。
您不应使用toString显示用户可读的文本。它旨在输出文本以进行调试。将您的toString方法替换为以下内容:


Contact

public String toReadableString() {
    return "Name: " + this.name + " " + this.lastName + ", phone number: " + phoneNumber + ", email: " + this.emailAddress;
}

不要呼叫您的ArrayList<Contact> contactArray。它不是数组。称它为members ..
Contacts->您的toString方法已损坏。您只是将每个Contact的结果存储在相同的toStringM中(也是一个不好的名字。我不知道这是什么意思)

    public String toReadableString()
    {
        String result = "Displaying all contacts and information:";
        for (Contact contact : members) {
            result += "\n\t" + contact.toReadableString();
        }
        return result;
    }

您的addContact(String passedString)方法已损坏。我不知道它应该做什么,但是它只会创建一个新的ArrayList,您将永远不会执行任何操作。
请用.indexOf(passedString) > -1替换.contains(passedString)。它可能做同样的事情,但是更容易阅读。
我不太确定public static String userInput()中的Contact方法应该做什么。看来您可以摆脱它。
您对Contact extends Comparable的继承是错误的。应该是Contact extends Comparable<Contact>
您的compareTo方法无法正常工作。将其替换为以下内容:

@Override
public int compareTo(Contact other) {
    if (this.lastName.compareTo(other.lastName) == 0) {
        return this.name.compareTo(other.name);
    } else {
        return this.lastName.compareTo(other.lastName);
    }
}

sort替换Collections.sort(members);方法(您可以这样做,因为Contact现在是正确的Comparable<Contact>

09-18 14:45