2017-04-07 204 views
1

我目前正在進行問答遊戲。在以下public void Run()中,我想驗證用戶輸入String answer的正確答案: answersList.forEach(new String如何比較ArrayList中的元素與特定的字符串?

我試圖用boolean來做到這一點。但我收到此錯誤信息:「無法解析構造‘字符串(布爾)’我該怎麼來解決這個問題

私人揮發性布爾的初始化:?

class Broadcaster extends Thread { 
private volatile boolean check_point = true; 

public boolean getFlag() { 
    System.out.println("getFlag is running"); 
    return this.check_point; 

} 

和BufferedReader,PrintStrem後等等...

public void run() { 
    while (true) { 
     try { 
      List<String> answersList = new ArrayList<>(); 
      try (Stream<String> answersStream = Files.lines(Paths.get(answersFile))) { 
       answersList = answersStream 
         .map(String::toLowerCase) 
         .collect(Collectors.toList()); 
      } catch (IOException a) { 
       a.printStackTrace(); 
       System.out.println("The timer isn't working correctly"); 
      } 
      if (answersList.forEach(new String(equals(answer)))) { //ERROR MESSAGE 
       write.println("Right Answer"); 
       points++; 
       check_point = true; 

      } else { 
       write.println("Wrong Answer"); 
       check_point = false; 
      } 
     } catch (Exception e) { 
      System.out.println("Some problem with the validation"); 
     } 
    } 
    } 
} 
+0

哪些字符串是你想比較? – BillThePlatypus

+0

問題是,您將「equals(answer)」的結果作爲布爾值傳遞給String的構造函數,因此不存在需要布爾值的String構造函數,即使您要刪除「equals ()「你仍然會得到一個錯誤,因爲forEach方法接受一個消費者。請指定所需的所有代碼以及您想要的最終結果。 –

+0

只需使用List.contains(答案)。 –

回答

1

但我收到此錯誤信息:「無法解析構造 ‘字符串(布爾)’我該怎麼來解決這個問題

的問題是,你要傳遞的01的結果?它是String的構造函數的布爾值,因此沒有String構造函數,它的值爲boolean


解決現在的問題,您可以使用lambda表達式是這樣的:

if(answersList.stream().anyMatch(str -> str.equals(answer))){ 
    write.println("Right Answer"); 
    points++; 
    check_point = true; 
}else{ 
    write.println("Wrong Answer"); 
    check_point = false;  
} 

或者乾脆:

if(answersList.contains(answer)){ 
    write.println("Right Answer"); 
    points++; 
    check_point = true; 
}else{ 
    write.println("Wrong Answer"); 
    check_point = false; 
} 
+1

謝謝你,Ousmane爲你的答案。我確實接受了這個答案,因爲這是根據我試圖實現的。謝謝所有想幫助我的人...... –

+0

@JosefLundström很高興知道它的幫助! :)。 –

1

我認爲最簡單的方法是使用

answersList.contains(answer) 

代替

answersList.forEach(new String(equals(answer))) 
1

出於同樣的原因的String =新的String(假);導致一個錯誤,你不能從一個布爾值創建一個字符串對象。

試試這個...

if (answersList.forEach(new String(Boolean.toString(equals(answer))))) 

我覺得你做你想要做的方式複雜得多,它必須雖然什麼......

+0

這不會編譯,因爲forEach將消費者作爲參數。 –

+0

爲什麼你提供一個字符串呢? –

+0

.anyMatch()返回一個布爾值。至於「forEach」一個消費者接受一個論點,但不會返回任何東西,這基本上就是我所掌握的。 –