我创建了一个包含三个类的联系人列表,ContactList类包含一个存储姓氏,名字,街道,城市,州,ZIP,国家,电子邮件,电话号码和备注的数组。
我想通过姓氏将一个搜索功能实现到ContactList的类中,在那里它显示了具有用户搜索到的姓氏的联系人的所有信息,但我似乎无法使用任何东西。 :(
import java.util.*;
public class ContactList {
//declaration of an array and its attributes
private final int SIZE = 10;
private Person [ ] list;
private int nextEmptyElementInArray = 0;
// Constructor for ContactList object
public ContactList () {
list = new Person [SIZE];
}
// Method that adds a new contact into the array
public void addNewContact() {
list[nextEmptyElementInArray] = new Person();
list[nextEmptyElementInArray].read();
nextEmptyElementInArray++;
}
// Method retrieves contacts by last name
int searchByLastName(Person [] list) {
Scanner console;
console = new Scanner(System.in);
String searchByLastName = console.next();
for (int i= 0; i< list.length; i++) {
if (list[nextEmptyElementInArray].lastName.equals(searchByLastName))
return i;
}
return -1;
}
}
答案 0 :(得分:2)
您的list
下标似乎是错误的:对于循环的每次迭代,您都是这样做的:
if (list[nextEmptyElementInArray].lastName.equals(searchByLastName))
如果我正确理解了这个问题,你应该这样做:
if (list[i].lastName.equals(searchByLastName))
另外,请注意将变量命名为与函数相同。充其量只会造成混乱。
[编辑]只是注意到您正在预先分配列表,然后使用nextEmptyElementInArray
管理实际内容长度。您的for
循环可能应该是这样的:
for (int i= 0; i< nextEmptyElementInArray; i++)
答案 1 :(得分:0)
我建议将搜索方法更改为
int searchByLastName(Person [] list, String lastName) {
for (int i= 0; i < list.length; i++) {
if (list[i].lastName.equals(lastName))
return i;
}
}
return -1;
}
从此函数外的控制台读取lastName并将其作为搜索参数传递