java中带有arraylist的电话簿

java中带有arraylist的电话簿,java,arraylist,Java,Arraylist,我想尝试用java中的arraylist实现一个简单的电话簿。 首先我制作了一个包含什么信息的类。需要和第二,我想有另一个类的方法,如获取信息和打印他们 因为我想使用数组列表,这是我到目前为止所做的,但是“print”方法一直给我for循环中的错误,是否有人可以帮助我优化代码,以及为什么我会出现这个错误 这是第一节课: public class PhoneBook { long number; String name; . . . . getter() and setter(); } 第二类

我想尝试用java中的arraylist实现一个简单的电话簿。 首先我制作了一个包含什么信息的类。需要和第二,我想有另一个类的方法,如获取信息和打印他们

因为我想使用数组列表,这是我到目前为止所做的,但是“print”方法一直给我for循环中的错误,是否有人可以帮助我优化代码,以及为什么我会出现这个错误

这是第一节课:

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