Java 从嵌套的类中引用方法

Java 从嵌套的类中引用方法,java,Java,我是JAVA初学者。 我正在尝试创建一个java电话簿,它包含三个主要类 Contacts.java Phonebook.java Showphonebook.java 联系人有两个非静态变量,姓名和电话,用于保存一个人的姓名和电话号码 然后,Phonebook是一个类,它包含Phonebook对象,并且有一个变量owner,它是一个字符串。因此,基本上,Phonebook对象拥有一个所有者,并引用Contacts对象向其添加联系人 然后,最后一个类Showphonebook是一个类,它与o

我是JAVA初学者。 我正在尝试创建一个java电话簿,它包含三个主要类

  • Contacts.java
  • Phonebook.java
  • Showphonebook.java
联系人
有两个非静态变量,
姓名
电话
,用于保存一个人的姓名和电话号码

然后,
Phonebook
是一个类,它包含
Phonebook
对象,并且有一个变量
owner
,它是一个字符串。因此,基本上,
Phonebook
对象拥有一个所有者,并引用
Contacts
对象向其添加联系人

然后,最后一个类
Showphonebook
是一个类,它与owner一起创建一个新的
Phonebook
,并向其中添加联系人

以下是我的上述代码:

Contact.java

public class Contact {
    private String name;
    private String phone;

    public Contact(String name, String phone) {
        this.name = name;
        this.phone = phone;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    public String toString() {
        return name + ": " + phone;
    }
}
import java.util.*;

public class Phonebook
{
    private String owner;
    public ArrayList<Contact> contacts =  new ArrayList<Contact>();

    public Phonebook(String owner) {
        this.owner = owner;
    }

    public void addContact(Contact name) {
        contacts.add(name);
    }

    public void show() {
        System.out.println(owner + "'s phonebook");
        for (Contact name : contacts) {
            System.out.println(name);
        }
    }

    /*public String findContactByName(String contactToSearch) {
        for (Contact name : contacts) {
            if (this.getName().equals(contactToSearch)) {

            }
        }
    }*/

}
public class ShowPhonebook
{

    public static void main(String[] args) {
        Phonebook phonebook1 = new Phonebook("Sam Johnson");
        phonebook1.addContact(new Contact("Kelly Wong", "(02) 12345678"));
        phonebook1.addContact(new Contact("Richard Jackson", "(02) 87654321"));
        phonebook1.show();
    }
}
Phonebook.java

public class Contact {
    private String name;
    private String phone;

    public Contact(String name, String phone) {
        this.name = name;
        this.phone = phone;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    public String toString() {
        return name + ": " + phone;
    }
}
import java.util.*;

public class Phonebook
{
    private String owner;
    public ArrayList<Contact> contacts =  new ArrayList<Contact>();

    public Phonebook(String owner) {
        this.owner = owner;
    }

    public void addContact(Contact name) {
        contacts.add(name);
    }

    public void show() {
        System.out.println(owner + "'s phonebook");
        for (Contact name : contacts) {
            System.out.println(name);
        }
    }

    /*public String findContactByName(String contactToSearch) {
        for (Contact name : contacts) {
            if (this.getName().equals(contactToSearch)) {

            }
        }
    }*/

}
public class ShowPhonebook
{

    public static void main(String[] args) {
        Phonebook phonebook1 = new Phonebook("Sam Johnson");
        phonebook1.addContact(new Contact("Kelly Wong", "(02) 12345678"));
        phonebook1.addContact(new Contact("Richard Jackson", "(02) 87654321"));
        phonebook1.show();
    }
}
我想在Phonebook.java中创建一个方法,该方法可以搜索电话簿以查看联系人是否存在,否则返回null

我该怎么做?我在想,我是否会使用
Contact
中的
getName()
方法来提取contacts
ArrayList
中每个联系人的姓名,并将其与
contactToSearch
变量进行比较,但是既然
getName()
是非静态的,我该怎么做呢?我很困惑,因为
Contact
持有
getName
,但要引用它,我需要一个对象,但我唯一的对象
phonebook1
是在
ShowPhonebook
类中,我觉得必须通过两个类才能到达。不知道怎么做


在这里寻找指导

首先,欢迎来到stack overflow

现在我假设您是java新手,因此对引用和
this
在java中的工作方式感到困惑。为了得到您所要求的,我建议对已注释的方法进行以下修改-

public String findContactByName(String contactToSearch) {
    for (Contact contact : this.contacts) { // changed "name" to "contact"; variable name should be aptly chosen
        if (contact.getName().equals(contactToSearch)) {
            // TODO: do your thing with "contact" variable
        }
    }
}

引用类的当前实例。在您的情况下,
将引用
phonebook1
实例。

如果(this.getName().equals(contactToSearch)){
=>
没有
.getName()
。您希望对
名称
变量执行此操作。这就是您使用foreach的原因。“[…]如果存在我搜索的人员,则返回null。“当找到时,它应该返回什么?只要返回一个布尔值,让它是真的或假的,取决于存在。FY:请考虑花一些时间来研究静态是什么。你似乎不太理解它。我的建议:我相信类SunPooBooes还不需要。搜索能力可以直接进入P。电子书。