我正在执行MOOC,应该返回与名称相关联的数字。号码名称组合保存在一个名为Phonebook的对象中,该对象是一个ArrayList。 arrayList保存我创建的类Person的信息。我需要在电话簿对象上执行getNumber(),但是由于getNumber()仅适用于Person类型的对象,所以不能执行。

package problem94_phonebook;
import java.util.ArrayList;

public class Phonebook {

    private ArrayList<Person> phonebook;


    public Phonebook(){
    this.phonebook = new ArrayList<Person>();
    }

    public String searchNumber(String name){
    if (this.phonebook.contains(name)){
    return this.phonebook.Person.getNumber(); // here is the problem
    }
    }

}


package problem94_phonebook;
import java.util.ArrayList;


public class Person {

    private String Name;
    private String Numb;
    private ArrayList<String> Phonebook;

    public Person(String name, String numb){
    this.Name = name;
    this.Numb = numb;
    this.Phonebook = new ArrayList<String>();
    }

    public String getName() {
        return Name;
    }

    public String getNumber() {
        return Numb;
    }

    public String toString(){
    return this.Name +"  " +"nummber:  " + this.Numb;
    }

    public void changeNumber(String newNumber){
    this.Numb = newNumber;
    }

    public void add(String name, String number){
    this.Phonebook.add(name);
    this.Phonebook.add(number);

    }

    public void printAll(){
    for(String i : this.Phonebook){
        System.out.println(i);
      }
    }
}

最佳答案

编辑

.contains起,.contains将不起作用


  当且仅当此列表包含至少一个元素(e == null?e == null:o.equals(e))时,返回true。


More info on how .contains works here

这意味着除非您的类重写.equals方法以比较名称,否则此部分-> o.equals(e)将始终返回false,因为.equals在比较两个不同的对象。 (more info on how .equals work here

因此,如果您真的想使用.contains,则需要在.equals类中重写Person方法。但这仍然无法正常工作,因为第二个问题是您访问数组列表的元素错误。

但是由于您是初学者,所以建议您尝试将方法更改为此:

public ArrayList<String> searchNumber(String name){
    ArrayList<String> result = new ArrayList<>(); // list incase of persons with the same name
    for (Person p : phonebook){ // iterate through the array
        if (p.getName().equals(name)){ // check if the current person's name is equal to anme
            result.add(p.getNumber()); // add the person's phone number
        }
    }
    return result ;
}


我也注意到您在Phonebook类中具有属性Person。它只是一个字符串数组,但是我认为将其更改为Phonebook数组更好,这样您就可以使用类Phonebook。这将是您的新Person类。

package problem94_phonebook;
import java.util.ArrayList;
import Phonebook;


public class Person {

    private String Name;
    private String Numb;
    private ArrayList<Phonebook> phonebook; // updated

    public Person(String name, String numb){
        this.Name = name;
        this.Numb = numb;
        this.phonebook= new ArrayList<Phonebook>();// updated
    }

    public String getName() {
        return Name;
    }

    public String getNumber() {
        return Numb;
    }

    public String toString(){
        return this.Name +"  " +"nummber:  " + this.Numb;
    }

    public void changeNumber(String newNumber){
        this.Numb = newNumber;
    }

    public void add(Person personToBeAdded){ // changed
        boolean isPresent = false;
        // check if person to be added is already in the phonebook to avoid duplicates
        for (Person person:this.phonebook){
            if (person.getName().equals(personToBeAdded.getName()) && person.getNumber().equals(personToBeAdded.getNumber())){
                isPresent = true;
                break;
            }
        }
        if (!isPresent){
            this.phonebook.add(personToBeAdded);
        }
    }

    public void printAll(){
      for(Person person : this.phonebook){
        System.out.println(person.toString());
      }
    }
}

关于java - 如何访问arrayList内的类的实例,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56981437/

10-12 12:40
查看更多