Java 在数组中查找值?

Java 在数组中查找值?,java,loops,arraylist,Java,Loops,Arraylist,我试图在数组中搜索值。结果总是一无所获。我假设我的循环不正确,你能帮我解决我做错了什么吗??假设它使用“searchFor”中的值并匹配。然后在Printer.printPersonList中显示该值 public static ArrayList<Person> findPerson(String searchFor) { ArrayList<Person> matches = new ArrayList<>(); for (Pers

我试图在数组中搜索值。结果总是一无所获。我假设我的循环不正确,你能帮我解决我做错了什么吗??假设它使用“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;

}
publicstaticarraylistfindperson(字符串搜索){
ArrayList matches=新的ArrayList();
for(个人p:个人列表){
布尔匹配=假;
if(p.getFirstName().equalsIgnoreCase(搜索)){
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))
如果(匹配){
添加(p);
}
Printer.printPersonList(匹配项);
}
返回比赛;
}

这是来自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());

    }
publicstaticvoidprintpersonlist(arraylistpersonlisttoprint){
系统输出
.printf(“\n姓氏社会保险号码年龄\n”);
系统输出
.printf(“====================================================================================================\n”);
用于(人员p:personListToPrint){
System.out.printf(“%-20s%-21s%-24s%s\n”,p.getLastName(),
p、 getLastName(),p.getSocialSecurityNumber(),p.getAge();
}

算法的问题在于,如果此人的名字与您正在搜索的密钥相等,但没有将此人添加到列表中,则您将
isAMatch
设置为true。以下是有缺陷的部分:

...code omitted...

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

                matches.add(p);
            }

        Printer.printPersonList(matches);

    }

...code omitted...

只有当
String.format(“%d”,p.getAge()).equals(searchFor)时,才会执行
if(isAMatch)
代码
-之后没有开/闭括号来表示代码块。

算法的问题是,如果此人的名字等于您正在搜索的密钥,则将其设置为true,但没有将此人添加到列表中。以下是有缺陷的部分:

...code omitted...

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

                matches.add(p);
            }

        Printer.printPersonList(matches);

    }

...code omitted...

只有当
String.format(“%d”,p.getAge()).equals(searchFor)时,才会执行
if(isAMatch)
代码
-之后没有开/闭括号来表示代码块。

算法的问题是,如果此人的名字等于您正在搜索的密钥,则将其设置为true,但没有将此人添加到列表中。以下是有缺陷的部分:

...code omitted...

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

                matches.add(p);
            }

        Printer.printPersonList(matches);

    }

...code omitted...

只有当
String.format(“%d”,p.getAge()).equals(searchFor)时,才会执行
if(isAMatch)
代码
-之后没有开/闭括号来表示代码块。

算法的问题是,如果此人的名字等于您正在搜索的密钥,则将其设置为true,但没有将此人添加到列表中。以下是有缺陷的部分:

...code omitted...

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

                matches.add(p);
            }

        Printer.printPersonList(matches);

    }

...code omitted...

只有当
String.format(“%d”,p.getAge()).equals(searchFor)时,才会执行
if(isAMatch)
代码
-后面没有表示代码块的开/闭括号。

看起来您缺少一些代码。现在,仅当年龄匹配且
isAMatch
为true
时,才会添加匹配项。您可能需要更改

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


看起来您缺少一些代码。现在,只有年龄匹配且
isAMatch
true
时,才会添加匹配项。您可能需要更改

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


看起来您缺少一些代码。现在,只有年龄匹配且
isAMatch
true
时,才会添加匹配项。您可能需要更改

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


看起来您缺少一些代码。现在,只有年龄匹配且
isAMatch
true
时,才会添加匹配项。您可能需要更改

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


您的代码应该是这样的:

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;

}
publicstaticarraylistfindperson(字符串搜索){
ArrayList matches=新的ArrayList();
for(个人p:个人列表){
布尔匹配=假;
if(p.getFirstName().equalsIgnoreCase(搜索)){
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;
}
如果(匹配){
添加(p);
}
}
Printer.printPersonList(匹配项);
返回比赛;
}

我修改了最后一个
else if
语句,并将
Printer
方法调用从
for
循环中移出。

您的代码应该是这样的:

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;

}
publicstaticarraylistfindperson(字符串搜索){
ArrayList matches=新的ArrayList();
for(个人p:个人列表){
布尔匹配=假;
if(p.getFirstName().equalsIgnoreCase(搜索)){
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;
}
如果(匹配){
添加(p);
}
}
Printer.printPersonList(匹配项);
返回比赛;
}

我修改了最后一个
else if
语句,并将
Printer
方法调用从
for
循环中移出。

您的代码应该是这样的:

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;

}
publicstaticarraylistfindperson(字符串