java中带有arraylist的电话簿
我想尝试用java中的arraylist实现一个简单的电话簿。 首先我制作了一个包含什么信息的类。需要和第二,我想有另一个类的方法,如获取信息和打印他们 因为我想使用数组列表,这是我到目前为止所做的,但是“print”方法一直给我for循环中的错误,是否有人可以帮助我优化代码,以及为什么我会出现这个错误 这是第一节课:java中带有arraylist的电话簿,java,arraylist,Java,Arraylist,我想尝试用java中的arraylist实现一个简单的电话簿。 首先我制作了一个包含什么信息的类。需要和第二,我想有另一个类的方法,如获取信息和打印他们 因为我想使用数组列表,这是我到目前为止所做的,但是“print”方法一直给我for循环中的错误,是否有人可以帮助我优化代码,以及为什么我会出现这个错误 这是第一节课: public class PhoneBook { long number; String name; . . . . getter() and setter(); } 第二类
public class PhoneBook {
long number;
String name;
.
.
.
.
getter() and setter();
}
第二类方法:
public class PhoneBookMethods {
ArrayList<PhoneBook> phoneBooks = new ArrayList<PhoneBook>();
public void getInfo(PhoneBook phoneBooks)
{
.
.
.
}
public void print(PhoneBook phoneBooks)
{
for (PhoneBook p: phoneBooks) {// this is where I got the error
//foreach not applicable to type 'PhoneBook'
System.out.print(p.getName());
....
}
}
公共类PhoneBookMethods{
ArrayList电话簿=新的ArrayList();
public void getInfo(电话簿电话簿)
{
.
.
.
}
公共作废打印(电话簿电话簿)
{
对于(phonebookp:phoneBooks){//这就是我得到错误的地方
//foreach不适用于“电话簿”类型
System.out.print(p.getName());
....
}
}
}公共作废打印(电话簿电话簿)
您的参数phoneBooks会屏蔽也被命名为phoneBooks的字段(数组)。所以编译器尝试将参数作为列表处理,但失败。在for-each循环中,更改
for (PhoneBook p: phoneBooks)
到
这样您就可以访问电话簿
arraylist,而不是print
方法的参数
编辑:
您可以使用“this”关键字使代码更加“明确”。
例如,在本例中,您有一个名为
phoneBooks
的参数,该参数与ArrayList
(成员变量)同名。因此,要明确区分两者,请使用this.phonebooks
访问成员变量phonebooks
(数组列表),并使用phonebooks
引用参数。如果要使用实例变量phonebooks
,则无需在方法print()中传递任何参数
或者,如果确实要传递参数,请重命名参数名称
public void print(ArrayList<PhoneBook> phoneBookList)
{
for (PhoneBook p: phoneBookList) {// this is where I got the error
//foreach not applicable to type 'PhoneBook'
System.out.print(p.getName());
....
}
}
公共作废打印(ArrayList电话簿列表)
{
对于(phonebookp:phoneBookList){//这就是我得到错误的地方
//foreach不适用于“电话簿”类型
System.out.print(p.getName());
....
}
}
实际上,一开始您遇到了一些设计问题。你认为什么是电话簿的方式是无效的。你应该考虑电话簿上有几个手机。因此,您可能有如下电话类:
public class Phone {
private String number;
private String name;
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
以及负责保存这些电话对象的电话簿类:
public class PhoneBook extends ArrayList<Phone> {
@Override
public String toString() {
StringBuilder stringBuilder = new StringBuilder();
for (Phone phone : this) {
stringBuilder.append("----------------------------\n");
stringBuilder.append("Name:" + phone.getName() + "\n");
stringBuilder.append("Number:" + phone.getNumber() + "\n");
}
return stringBuilder.toString();
}
}
最后,这是输出:
----------------------------
Name:Eray
Number:0533XXXXXXX
----------------------------
Name:Canan
Number:0544XXXXXXX
----------------------------
Name:Bita Mirshafiee
Number:0599XXXXXXX
“
print
方法的参数,这是无用的,应该省略。谢谢大家,我只是不知道“this”如何帮助我访问“phoneBooks arraylist”,也许我对“this”的含义有点困惑,我知道它在其他地方的用法,但我没有在数组列表中使用它,请您稍微描述一下。PhoneBookMethods应称为PhoneBook,PhoneBook应称为PhoneBookEntry。如果print是正确的方法,则应在字段上操作,即第二个版本不合适。可能是,作为一个静态方法,然后参数类型应该是Collection,而不是ArrayList。答案不错,但对于一个简单的解决方案来说太复杂了;-)谢谢,你真的解决了这个问题。它很好,因为它提醒了我一些方法,通过扩展它将变得更容易。
public class PhoneBook extends ArrayList<Phone> {
@Override
public String toString() {
StringBuilder stringBuilder = new StringBuilder();
for (Phone phone : this) {
stringBuilder.append("----------------------------\n");
stringBuilder.append("Name:" + phone.getName() + "\n");
stringBuilder.append("Number:" + phone.getNumber() + "\n");
}
return stringBuilder.toString();
}
}
public class MAIN {
public static void main(String[] args) {
Phone myPhone = new Phone();
myPhone.setName("Eray");
myPhone.setNumber("0533XXXXXXX");
Phone girlfriendPhone = new Phone();
girlfriendPhone.setName("Canan");
girlfriendPhone.setNumber("0544XXXXXXX");
Phone yourPhone = new Phone();
yourPhone.setName("Bita Mirshafiee");
yourPhone.setNumber("0599XXXXXXX");
PhoneBook phoneBook = new PhoneBook();
phoneBook.add(myPhone);
phoneBook.add(girlfriendPhone);
phoneBook.add(yourPhone);
System.out.println(phoneBook);
}
}
----------------------------
Name:Eray
Number:0533XXXXXXX
----------------------------
Name:Canan
Number:0544XXXXXXX
----------------------------
Name:Bita Mirshafiee
Number:0599XXXXXXX