簡體   English   中英

Java Hashset返回false而不是true

[英]Java Hashset returns false instead of true

這段代碼不斷返回false,我無法弄清楚原因。

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包含瘋狂,憤怒,憤怒和發怒的字符串。 我把它打印出來以確保它在那里。 我不知為何會變得虛假。 有人可以幫忙嗎?

以下代碼完美運行:

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'字符,這就是為什么它與“word”varibale不匹配。 請驗證,我沒有測試它:)

我認為,你必須檢查每個angryWordSet元素是否存在前導和尾隨空格。

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

關於錯誤的嘗試給出答案。 我會留下前一個答案的一部分,希望它對某人有幫助。

Object[] toArray()以適當的順序(從第一個元素到最后一個元素)返回一個包含此列表中所有元素的數組。 返回的數組將是“安全的”,因為此列表不會保留對它的引用。 (換句話說,此方法必須分配一個新數組)。 因此調用者可以自由修改返回的數組。

<T> T[] toArray(T[] a)以適當的順序(從第一個元素到最后一個元素)返回一個包含該列表中所有元素的數組; 返回數組的運行時類型是指定數組的運行時類型。 如果列表適合指定的數組,則返回其中。 否則,將使用指定數組的運行時類型和此列表的大小分配新數組。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM