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