2016-03-30 4 views
2

Dieser Codeblock gibt immer wieder false zurück, und ich kann nicht herausfinden warum.Java Hashset gibt false anstelle von true zurück

Das angryWordSet enthält die Strings mad, angry, livid und fuming. Ich habe es ausgedruckt, um sicherzugehen, dass es da war. Ich werde jedoch immer wieder falsch. Kann jemand damit helfen?

+2

Sind Sie sicher, dass die Zeile nicht "böse" ist dh. mit einem Leerzeichen oder Sonderzeichen? Können Sie die Länge jedes Strings in der Sammlung ausdrucken? –

Antwort

3

Ich denke, Sie für die Existenz von Vorder- und Hinterwhitespaces für jedes angryWordSet Element zu überprüfen.

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

über den falschen Versuch, eine Antwort zu geben. Ich würde einen Teil der vorherigen Antwort in der Hoffnung lassen, dass es für jemanden hilfreich sein wird.

Object[] toArray() gibt ein Array alle Elemente in dieser Liste in der richtigen Reihenfolge (vom ersten bis zum letzten Element) enthält. Das zurückgegebene Array wird "sicher" sein, da keine Referenzen darauf von dieser Liste verwaltet werden. (Mit anderen Worten, diese Methode muss ein neues Array zuweisen). Dem Aufrufer steht es somit frei, das zurückgegebene Array zu ändern.

<T> T[] toArray(T[] a) gibt ein Array zurück, das alle Elemente in dieser Liste in der richtigen Reihenfolge enthält (vom ersten bis zum letzten Element); Der Laufzeittyp des zurückgegebenen Arrays ist der des angegebenen Arrays. Wenn die Liste in das angegebene Array passt, wird sie darin zurückgegeben. Andernfalls wird ein neues Array mit dem Laufzeittyp des angegebenen Arrays und der Größe dieser Liste zugeordnet.

+3

Können Sie eine Erklärung hinzufügen, wie das hilft? –

+3

Nach seiner [API-Dokumentation] (https://docs.oracle.com/javase/8/docs/api/java/util/List.html#toArray-T:A-), die Liste 'toArray (T [ ] a) 'method 'Gibt ein Array zurück, das alle Elemente in dieser Liste in der richtigen Reihenfolge enthält (vom ersten bis zum letzten Element); der Laufzeittyp des zurückgegebenen Arrays ist der des angegebenen Arrays. Wenn die Liste in das angegebene Array passt Es wird darin zurückgegeben. Andernfalls wird ein neues Array mit dem Laufzeittyp des angegebenen Arrays und der Größe dieser Liste zugeordnet. Dies unterscheidet sich von Ihrer Beschreibung der Methode. –

+0

nur einen Moment, ich korrigiere – Andrew

4

Code Nach funktioniert perfekt:

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

ich davon aus bin, wenn Sie Readline- tun, Worte ‚\ n‘ oder ‚\ r‘ Charakter zu ihm hinzugefügt werden, das ist, warum es nicht mit dem passenden " Wort "varibale". Bitte überprüfen Sie, ich habe es nicht getestet :)