gpt4 book ai didi

java - 使用 toString 和增强型 for 循环显示 ArrayList 信息的更好方法

转载 作者:行者123 更新时间:2023-12-01 19:54:45 30 4
gpt4 key购买 nike

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

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

在我的主/驱动程序类中,我有一个 ContactArrayList 类的对象,并创建了一个“用户”对象和 Contact 类的几个“固定”对象。

我的问题:

当用户选择显示所有联系人的信息(包括固定对象和用户对象)时,我尝试使用带有 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",
"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 类的更多信息,请告诉我!

最佳答案

感谢您提供缺少的类(class)。问题出在你的Contact类:

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

这些变量都是static ,这意味着它们在 Contact 中不存在一次,但每个应用程序一次。所以所有Contact s 将共享相同的 name , lastName等等.

如果删除 static修改器,它应该可以工作。

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

  1. 请勿调用您的ContactArrayList像那样。其他开发人员会关注它并期望它扩展 ArrayList ,但事实并非如此。只需调用它 Contacts ,这要好得多(我将在这里这样调用它)。
  2. 您不应该使用toString显示用户可读的文本。它旨在输出文本以用于调试目的。替换您的 toString方法如下:

    1. Contact :

      public String toReadableString() {
      return "Name: " + this.name + " " + this.lastName + ", phone number: " + phoneNumber + ", email: " + this.emailAddress;
      }
    2. 不要调用您的ArrayList<Contact> contactArray 。它不是一个数组。称之为 members ..

    3. 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;
      }
    4. 您的addContact(String passedString)方法被破坏了。我不知道它应该做什么,但它只会创建一个新的 ArrayList你永远不会用它做任何事。
    5. 请替换.indexOf(passedString) > -1.contains(passedString) 。它可能做同样的事情,但更容易阅读。
    6. 我不太清楚该方法是什么 public static String userInput()Contact应该做的。看来你可以摆脱它了。
    7. 您的Contact extends Comparable的继承权是错的。应该是Contact extends Comparable<Contact>

    8. 您的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);
      }
      }
    9. 替换您的sort方法 Collections.sort(members); (你可以这样做,因为 Contact 现在是正确的 Comparable<Contact>)

关于java - 使用 toString 和增强型 for 循环显示 ArrayList 信息的更好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49971052/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com