我希望能够使用ContactArrayList
类的Contact
从联系人列表中显示信息。
我有一个ContactArrayList
类,其中包含一个Contact
类对象。在ContactArrayList
类中,我有一个add
,remove
,size
,isEmpty
等。该类的方法,该方法将与ContactArrayList
类中的该ContactArrayList
一起使用。
在我的main / driver类中,我有一个ContactArrayList
类的对象,并创建了一个“用户”对象和Contact
类的几个“罐头”对象。
我的问题:
当用户选择显示所有联系人的信息,包括固定对象和用户对象时,我尝试使用增强的for循环W / toString
类的ContactArrayList
方法,但是因为我使用的是增强的for循环,当我想使用Contact
类Contact
时,一个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
将共享相同的name
,lastName
等。如果删除
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>
)