2016-11-06 2 views
-2

누구든지 내가 뭘 잘못하고 있는지 조언 할 수 있습니까? 나는 올해까지 객체들을위한 클래스를 검색하려고 노력하고 있습니다. 그러나 일치하는 것이 없다면 일치하는 것이 없다는 것을 출력하기를 원하지만 작동하지 않는 것은 단지 해가 발견 되더라도 출력하는 것입니다. 도움자바 소스 코드 클래스

//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

일치하는 것이 있는지 기록하는 것 eg 'boolean' 변수에 넣고, 그렇지 않으면 일치하는 것을 출력하지 않습니다. –

답변

0

당신은 Java8 스트림에서 noneMatch()를 사용하고이 작업을 수행 할 수는 다음과 같습니다 Java8없이

if(list.stream().map(Book::getYear).noneMatch((matchyear -> matchyear == year))) { 
    System.out.println("No match"); 
} 

: 당신이 필요로하는

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