Java 遍历数组并检查每个项,如果不匹配则打印错误

Java 遍历数组并检查每个项,如果不匹配则打印错误,java,arrays,object,if-statement,for-loop,Java,Arrays,Object,If Statement,For Loop,我设置了一个for循环,循环遍历对象数组中的每个项。我有一个if语句,它检查特定项中的值是否与特定的字符串值匹配。如果有,我想把它打印到屏幕上。我这样做没有问题。但是,如果循环一路通过而没有找到匹配项,我希望程序打印一条错误消息。按照我现在将其设置为if-else语句的方式,如果不匹配,程序将为每个项打印一条错误消息。我想不出只有在循环完成后才能这样做的方法。任何指导都将不胜感激。创建一个布尔变量来存储是否已找到匹配项。在循环运行之前将其设置为false,然后在循环中找到匹配项时将其设置为tru

我设置了一个for循环,循环遍历对象数组中的每个项。我有一个if语句,它检查特定项中的值是否与特定的字符串值匹配。如果有,我想把它打印到屏幕上。我这样做没有问题。但是,如果循环一路通过而没有找到匹配项,我希望程序打印一条错误消息。按照我现在将其设置为if-else语句的方式,如果不匹配,程序将为每个项打印一条错误消息。我想不出只有在循环完成后才能这样做的方法。任何指导都将不胜感激。

创建一个布尔变量来存储是否已找到匹配项。在循环运行之前将其设置为false,然后在循环中找到匹配项时将其设置为true。如果循环完成后仍为false,则打印错误消息。

在代码中使用以下模式:

boolean matchFound = false;
for (item: objects) {
    if (item.equals(stringValue) {
        //print item the same way as you did
        matchFound = true;
    }
}
if (!matchFound) {
    System.out.println("No match found!");
}
上面的代码片段显示了如何实现所需的功能


根据Keppil的评论

,正如Keppil所建议的,稍微优化了一下:

boolean matchFound = false;
for (int i = start; i < max && boolean == false; i++) {
    if (foundElement()) {
        matchFound = true;
    }
}
if (!matchFound) {  
    log.error = "";
}
boolean matchFound=false;
对于(int i=start;i
或者你可以

int i = start;
for (; i < max; i++) {
    if (foundElement()) {
        break;
    }
}
if (i == max) {
    log.error = "";
}
inti=start;
对于(;i
Keppil和Little Child有很好的解决方案,但让我建议进行重构,使这个问题随着规范的变化变得更容易处理。也许是矫枉过正。分解算法的步骤。首先,获取匹配项列表。然后,决定如何处理它们。e、 g.(你最终也会想要分解这个代码)


如果您不需要匹配的特定对象,那么解决您的问题的最干净的方法就是编写一个进行查找的helper方法。通过这种方式,我们可以避免局部变量的赋值和重新赋值,代码变得更加清晰:

boolean find(List<?> list, Object toFind) {
   for (Object o : list) if (o.equals(toFind)) return true;
   return false;
}
如果您确实需要所有匹配的对象,那么我再次推荐一个helper方法,它返回所有匹配的列表,供您以任何其他方式打印或处理:

<T> List<T> getMatches(List<T> list, Object toFind) {
   final List<T> ret = new ArrayList<>();
   for (T x : list) if (t.equals(toFind)) ret.add(x);
   return ret;
}
List getMatches(列表,对象toFind){
最终列表ret=新的ArrayList();
对于(tx:list)如果(T等于(toFind))ret.add(x);
返回ret;
}
现在,在调用方法中,您可以

final List<MyType> matches = find(inputList, toFind);
if (matches.isEmpty()) System.out.println("No match was found");
else { ... process the list as needed ... }
final List matches=find(inputList,toFind);
if(matches.isEmpty())System.out.println(“未找到匹配项”);
否则{…根据需要处理列表…}

在循环前将
布尔匹配设置为false,如果您发现了什么,则将其设置为true,如果在循环后设置为false,则打印错误消息。@Keppil您能不能将其作为一个答案,以便它可以被投票和(可能)接受?讽刺的是,我们的答案如此相似,以至于看起来就像我复制了您:D
boolean find(List<?> list, Object toFind) {
   for (Object o : list) if (o.equals(toFind)) return true;
   return false;
}
System.out.println((find(list, toFind)? "A" : "No") + " match was found");
<T> List<T> getMatches(List<T> list, Object toFind) {
   final List<T> ret = new ArrayList<>();
   for (T x : list) if (t.equals(toFind)) ret.add(x);
   return ret;
}
final List<MyType> matches = find(inputList, toFind);
if (matches.isEmpty()) System.out.println("No match was found");
else { ... process the list as needed ... }