任何人都可以帮忙建议我做错了什么。我试图按年份搜索一个类的对象,但如果没有匹配,我想要一个声明打印出没有匹配但它不起作用它只是打印出来,即使找到了年份。在此先感谢您的帮助
//search by year
public void searchByYear(int year){
for(Book s : books){
if(s.getYear()==year){
System.out.println(s.toString());
}
}System.out.println("No match");
}
答案 0 :(得分:2)
试试这个:
public void searchByYear(int year){
boolean foundAny = false;
for(Book s : books){
if(s.getYear()==year){
foundAny = true;
System.out.println(s.toString());
}
}
if (!foundAny) {
System.out.println("No match");
}
}
我们使用布尔变量foundAny
来跟踪是否找到了一年。只有在找不到时才会打印“不匹配”。
答案 1 :(得分:0)
另一种解决方案:
final List<Book> matches = new ArrayList<>();
for (Book s : books) {
if (s.getYear() == year) {
matches.add(s);
}
}
if (matches.isEmpty()) {
System.out.println("No match");
} else {
for (Book s : matches) {
System.out.println(s.toString());
}
}
答案 2 :(得分:0)
您可以使用Java8 Streams中的noneMatch
()并执行以下操作:
if(list.stream().map(Book::getYear).noneMatch(( matchyear -> matchyear == year))) {
System.out.println("No match");
}
没有Java8:
boolean isFound = false;
for(Book s : books){
if(s.getYear()==year){
isFound = true;
}
}
if(!isFound) {
System.out.println("No match");
}