在数组中查找值?

时间:2014-04-24 22:13:41

标签: java loops arraylist

我正在尝试搜索数组中的值。尽管如此,结果仍然没有回归。我假设我的循环不合适,你能帮助我做错吗?假设使用“searchFor”中保存的值并匹配。然后在Printer.printPersonList中显示该值。

    public static ArrayList<Person> findPerson(String searchFor) {
    ArrayList<Person> matches = new ArrayList<>();
    for (Person p : personList) {
        boolean isAMatch = false;

        if (p.getFirstName().equalsIgnoreCase(searchFor)) {
            isAMatch = true;

        } else if (p.getLastName().equalsIgnoreCase(searchFor)) {
            isAMatch = true;

        } else if (p.getSocialSecurityNumber().contains(searchFor)) {
            isAMatch = true;
            ;
        } else if (String.format("%d", p.getAge()).equals(searchFor))
            if (isAMatch) {

                matches.add(p);
            }

        Printer.printPersonList(matches);

    }
    return matches;

}

这是来自printer.java

public static void printPersonList(ArrayList<Person> personListToPrint) {

    System.out
            .printf("\nLast Name           First Name           Social Security Number  Age\n");
    System.out
            .printf("=================== ===================  ======================  ===\n");
    for (Person p : personListToPrint) {

        System.out.printf("%-20s%-21s%-24s%s\n", p.getLastName(),
                p.getLastName(), p.getSocialSecurityNumber(), p.getAge());

    }

3 个答案:

答案 0 :(得分:2)

您的算法存在的问题是,如果Person的名字等于您要搜索的密钥,但未将此人添加到列表中,则您将isAMatch设置为true。这是一个有缺陷的部分:

...code omitted...

} else if (String.format("%d", p.getAge()).equals(searchFor))
            if (isAMatch) {

                matches.add(p);
            }

        Printer.printPersonList(matches);

    }

...code omitted...

if(isAMatch)代码仅在String.format("%d", p.getAge()).equals(searchFor)时执行 - 之后没有打开/关闭括号表示代码块。

答案 1 :(得分:1)

看起来你错过了一些代码。现在,只有年龄匹配并且isAMatch已经true时才会添加匹配项。你可能想要改变

} else if (String.format("%d", p.getAge()).equals(searchFor))
    if (isAMatch) {
        matches.add(p);
    }

} else if (String.format("%d", p.getAge()).equals(searchFor)) {
    isAMatch = true;
}
if (isAMatch) {
    matches.add(p);
}

答案 2 :(得分:0)

您的代码应该是这样的:

public static ArrayList<Person> findPerson(String searchFor) {
    ArrayList<Person> matches = new ArrayList<>();
    for (Person p : personList) {
        boolean isAMatch = false;

        if (p.getFirstName().equalsIgnoreCase(searchFor)) {
            isAMatch = true;

        } else if (p.getLastName().equalsIgnoreCase(searchFor)) {
            isAMatch = true;

        } else if (p.getSocialSecurityNumber().contains(searchFor)) {
            isAMatch = true;

        } else if (String.format("%d", p.getAge()).equals(searchFor)) {
           isAMatch = true;
            }

        if (isAMatch) {

                matches.add(p);
            }
    }
    Printer.printPersonList(matches);
    return matches;

}

我修改了上一个else if语句,并将Printer方法调用取代for循环。