我想在java中尝试使用arraylist进行电话簿的简单实现。 首先我创建了一个包含什么信息的类。需要和第二我想要另一个类,有方法,如获取信息和打印它们。
因为我想使用数组列表这是我到目前为止所做的,但是' print'方法继续给我循环中的错误,有没有人可以帮助我优化我的代码以及为什么我有这个错误。
这是第一堂课:
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());
....
}
}
}
答案 0 :(得分:2)
在for-each循环中,更改
for (PhoneBook p: phoneBooks)
到
for (PhoneBook p: this.phoneBooks)
这样您就可以访问phoneBooks
arraylist,而不是print
方法的参数。
修改强>
您可以使用&#34; 这个&#34;关键字使您的代码更加明确&#34;。
例如,在您的情况下,您有一个名为phoneBooks
的参数,其名称与您的ArrayList
(成员变量)相同。因此,要明确区分它们中的两个,请使用this.phonebooks
来访问成员变量phoneBooks
(ArrayList),并使用phoneBooks
来引用参数。
答案 1 :(得分:1)
如果要使用实例变量phoneBooks
,则无需在方法print()
中传递任何参数。
public void print()
{
for (PhoneBook p: phoneBooks) {// this is where I got the error
//foreach not applicable to type 'PhoneBook'
System.out.print(p.getName());
....
}
}
或者,如果你真的想传递param重命名参数名称
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());
....
}
}
答案 2 :(得分:0)
public void print(PhoneBook phoneBooks)
您的参数phoneBooks屏蔽了也称为phoneBooks的字段(数组)。因此编译器会尝试将参数视为列表并使其失效。
答案 3 :(得分:0)
实际上一开始你有一些设计问题。您认为什么是电话簿的方式无效。你应该考虑一个电话簿,上面有几个手机。因此,您可能拥有如下手机类:
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();
}
}
这是电话的arraylist,仅此而已。因此,您可以直接通过电话簿添加或删除手机。这是如何使用它:
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