迭代数组并检查每个项目,如果不匹配则打印错误

时间:2013-11-03 19:03:16

标签: java arrays object if-statement for-loop

我有一个for循环设置,它遍历对象数组中的每个项目。我有一个if语句,检查某个项目中的值是否与特定字符串值匹配。如果是,我想将其打印到屏幕上。我这样做没问题。但是,如果循环在没有找到匹配的情况下完成整个过程,我希望程序打印错误消息。我现在将它设置为if else语句的方式,程序正在为每个项目打印错误消息,如果它不匹配。一旦循环结束,我无法找到一种方法。任何指导都将非常感谢。

6 个答案:

答案 0 :(得分:1)

在代码中使用以下模式:

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!");
}

答案 1 :(得分:0)

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

答案 2 :(得分:0)

boolean matchFound = false; // dont be so eager that there is a match
for(String each : lotOfStrings){
    if(each.equals(someOtherStrings)){
        matchFound = true;
        // break; // optionally, you may break out
    }
}

if(!matchFound){ // no match found?
    System.out.println("Error");
}else{
    System.out.println("Found a match");    
}  

上面的代码片段展示了如何实现您想要的效果。

基于Keppil的评论

答案 3 :(得分:0)

正如Keppil建议的那样,进行了一些优化:

boolean matchFound = false;
for (int i = start; i < max && boolean == false; i++) {
    if (foundElement()) {
        matchFound = true;
    }
}
if (!matchFound) {  
    log.error = "";
}

或者你可以做

int i = start;
for (; i < max; i++) {
    if (foundElement()) {
        break;
    }
}
if (i == max) {
    log.error = "";
}

答案 4 :(得分:0)

Keppil和Little Child有很好的解决方案,但是让我建议一个重构,让你的规格改变时,这个问题会变得更容易处理。也许是矫枉过正。分解算法的步骤。 首先,获取匹配列表。 然后,决定如何处理它们。例如(你最终也希望打破这段代码)

ArrayList<T> matches = new ArrayList<T>;   // T is your object type, e.g. String
for (T item : myObjects) {
   if (item.equals(thingToMatch))
      matches.add(item);
}

//现在,决定如何处理清单...

if (matches.size() > 0) {
   for (T t : matches)
      // print it here
      // but in the future could log them, store in a database, convert to XML, etc...
}
else
   System.out.println("no matches were found to " + thingToMatch);

答案 5 :(得分:0)

如果您不需要匹配的特定对象,那么最简单的方法就是通过编写辅助方法来完成查找。这样我们可以避免分配和重新分配局部变量,代码变得更加清晰:

boolean find(List<?> list, Object toFind) {
   for (Object o : list) if (o.equals(toFind)) return true;
   return false;
}

这适用于字符串列表以及任何其他对象。在main方法中,您可以编写

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 ... }