我希望能够使用ContactArrayList
类的Contact
来显示联系人列表中的信息。
我有一个ContactArrayList
类,其中包含Contact
类对象。在ContactArrayList
课程内,我有一个add
,remove
,size
,isEmpty
等。该类的方法将用于ContactArrayList
类中的ContactArrayList
以及其他方法。
在我的main / driver类中,我有一个ContactArrayList
类的对象,并创建了一个" user"对象和几个"罐头" Contact
类的对象。
当用户选择显示所有联系人的信息时,包括预设对象和用户对象,我尝试使用toString
类的增强型for循环W / ContactArrayList
方法,但因为我我使用Contact
类"迭代器"使用增强的for循环当我想使用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",
"jamesConney@seeMe.com");
Contact c3 = new Contact("JJ", "Jim", "7608939836",
"theStuff@gmail.com");
Contact c4 = new Contact("Jimmer", "ConBoy", "7608040500",
"jimConBoy@seeMe.com");
//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类的更多信息,请告诉我们!
答案 0 :(得分:2)
感谢您提供缺少的课程。
问题出在您的Contact
班级:
private static String name = " ";
private static String lastName = " ";
private static String phoneNumber = " ";
private static String emailAddress = " ";
这些变量都是static
,这意味着它们每Contact
不存在一次,但每个应用程序一次。因此,所有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
- &gt;您的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>
{/ 1}} 答案 1 :(得分:1)
toString()
方法是java用于生成Strings
供开发人员调试。我建议您实现自己的toReadableString()
,或者只是定义您希望如何在现场呈现它。 Java 8有一些很好的功能:
case 2:
String s = contacts.stream()
.map(c -> Stream.of(c.getName(), c.getLastName(), c.getPhoneNumber(), c.getEmailAddress())
.collect(Collectors.joining(", ")))
.collect(Collectors.joining("\n\t", "Displaying all contacts and information:\n\t", ""));
System.out.println(s);
break;
首先,我们从Stream
创建contacts
。然后,我们将Stream
Contact
转换为Stream
String
个map
。我们再次创建四个值中的Stream
并将其与,
连接起来。第二个Stream
将创建每个联系人。
然后我们回到外部Stream
,我们现在有Stream
个可读的联系人。我们也加入了它们,将它们与"\n\t"
分开,从而创建一个如下所示的String
:
Displaying all contacts and information:
Mike, Dim, 123456789, email
Foo, Bar, 987654321, hello@wor.ld
答案 2 :(得分:0)
您已经在ArrayList的toString
方法中循环。所以你不应该这样做
cal1.toString();
而不是
for(Contact display : cal1.contactArray)
{
System.out.println(display.toString());
}