0

我制作了一个包含三个类的联系人列表,ContactList 类包含一个存储姓氏、名字、街道、城市、州、邮编、国家、电子邮件、电话号码和便笺的数组。

我想在 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;
        }
    }
4

2 回答 2

2

您的list下标似乎是错误的:对于循环的每次迭代,您都在执行以下操作:

if (list[nextEmptyElementInArray].lastName.equals(searchByLastName))

如果我正确理解了这个问题,你应该这样做:

if (list[i].lastName.equals(searchByLastName))

另外,请注意将变量命名为与函数相同。充其量它会引起混乱。

[编辑] 刚刚注意到您正在预先分配列表,然后使用nextEmptyElementInArray. 你的for循环应该是这样的:

for (int i= 0; i< nextEmptyElementInArray; i++)
于 2013-03-25T01:22:27.740 回答
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 并将其作为搜索参数传递

于 2013-03-25T04:51:23.003 回答