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