在数组中按姓氏搜索

时间:2013-03-25 01:18:12

标签: java arrays search

我创建了一个包含三个类的联系人列表,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;
        }
    }

2 个答案:

答案 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并将其作为搜索参数传递