2016-03-30 6 views
2

このコードブロックは偽を返し続けます。理由はわかりません。Javaハッシュセットは、真ではなく偽を返します。

List<String> angry = new ArrayList<String>(); 
while ((anger = angerSt.readLine()) != null) { 
    angry.add(anger); 
} 
angerSt.close(); 
String[] angrywords = angry.toArray(new String[0]); 
String word = "mad" 
Set<String> angryWordSet = new HashSet<String>(Arrays.asList(angrywords)); 
if(angryWordSet.contains(word)) 
{ 
    System.out.print("Yes"); 
    return true; 
} 
else return false; 

angryWordSetには、mad、angry、livid、fumingという文字列が含まれています。私はそれがそこにいたことを確認するためにそれを印刷した。私はどうにかして偽り続けています。誰かがこれを助けることができますか?

+2

あなたは本当にラインが 'mad'ではないか確認してください。スペースや特殊文字で?あなたはコレクション内の各文字列の長さを印刷できますか? –

答えて

3

私は、各angryWordSet要素の先頭と末尾の空白の有無をチェックする必要があると思います。答えを与えるために、間違った試みについて

for (String s : angryWordSet) { 
    if (s.trim().equals(word)) return true; 
} 
return false; 

。私はそれが誰かのために役立つことを期待して、前の答えの一部を残すだろう。

Object[] toArray()適切な順序でリスト内の要素 の全て(最初から最後の要素まで)を含む配列を返します。返された配列 は、このリストによって参照されていないという意味で が保持されていないため、安全です。 (つまり、このメソッドは 新しい配列を割り当てる必要があります)。したがって、呼び出し元は返された配列を自由に変更できます。

<T> T[] toArray(T[] a)は、このリストのすべての 要素を適切な順序(最初の要素から最後の要素まで)で含む配列を返します。 返される配列の実行時の型は、指定された配列の実行時の型です。 リストが指定された配列に収まる場合は、リストに戻ります。 それ以外の場合は、指定された配列 のランタイムタイプとこのリストのサイズで新しい配列が割り当てられます。次のコード

+3

どのように役立つかについての説明を追加できますか? –

+3

[APIのドキュメント](https://docs.oracle.com/javase/8/docs/api/java/util/List.html#toArray-T:A-)によると、リスト 'toArray(T [ ] a) 'method"このリスト内のすべての要素を適切な順序で(最初の要素から最後の要素に)含む配列を返します。返される配列の実行時の型は、指定された配列の型です。それ以外の場合、指定された配列の実行時の型とこのリストのサイズで新しい配列が割り当てられます。 "これはメソッドの説明とは異なります。 –

+0

ちょっと待って、私は訂正しています – Andrew

4

は完璧に動作します:

public static void main(String s[]) 
{ 
    List<String> angry = new ArrayList<String>(); 
    angry.add("a"); 
    angry.add("b"); 
    angry.add("c"); 
    angry.add("mad"); 
    angry.add("b"); 
    angry.add("b"); 
    String word = "mad"; 
    Set<String> angryWordSet = new HashSet<String>(angry); 
    if (angryWordSet.contains(word)) 
    { 
     System.out.print("Yes"); 

    } 
    else 
    { 
     System.out.print("No"); 
    } 
} 

私はあなたがreadlineの操作を行う際に、言葉は「\ N」または「\ rを」文字が追加、そのがで一致していない理由thatsの持っていると仮定しています」単語 "varibale。私はそれをテストしなかったことを確認してください:)

関連する問題