我正在执行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/