2016-11-06 60 views
-2

任何人都可以幫助建議我做錯了什麼。我試圖按年搜索一個類的對象,但是如果沒有匹配,我想要一個語句打印出來,沒有匹配,但它不能正常工作,即使找到了一年,也只是打印出來。預先感謝幫助java源代碼類

//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"); 
    } 
+4

您需要記錄是否有任何匹配,例如在一個'boolean'變量中,如果沒有,打印出沒有匹配。 –

回答

0

您可以使用從Java8流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"); 
} 
+0

謝謝你的回覆:-) – americanheartbreak

+0

如果這有助於你可以給我一個upvote :-) – developer

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跟蹤如果一年被發現。只有找不到,我們纔打印「不匹配」。

+0

非常感謝你做了一個夢想 – americanheartbreak

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()); 
    } 
} 
+0

非常感謝你回覆:-)偉大的學習一些新的東西 – americanheartbreak