我正在尝试搜索数组中的值。尽管如此,结果仍然没有回归。我假设我的循环不合适,你能帮助我做错吗?假设使用“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());
}
答案 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
循环。