2014-02-05 20 views
-1

當我使用「frageStellen」方法時沒有任何反應 - 爲什麼?我想讓我的電腦從適合「frage」的HashMap「ratschlagMap」中返回答案。HashMap不起作用

import java.util.HashMap; 

public class Kapitän 
{ 
    private HashMap<String, String> ratschlagMap; 

public Kapitän() 
{ 
ratschlagMap = new HashMap<String, String>(); 
antwortenGenerieren(); 
} 

public void antwortenGenerieren() 
{ 
    ratschlagMap.put("hallo", "Guten Tag, mein Herr!"); 
    ratschlagMap.put("wetter", "Es riecht nach Sturm!"); 
    ratschlagMap.put("liebe", "Die Liebe ist wie die See: erst stürmisch, dann flaut sie ab..."); 
    ratschlagMap.put("zukunft", "Erst die Segel setzten, dann übers Ziel nachdenken!"); 
} 

public void frageStellen (String frage) 
{ 
    frage.toLowerCase(); 

    if (ratschlagMap.containsKey(frage)) 
    { 
     ratschlagMap.get(frage); 
    } 
} 
} 

謝謝!!

+0

你期望發生的?你寫了什麼代碼來實現這一點? – SLaks

+0

您需要使用方法返回的值,包括'toLowerCase()' – SLaks

+2

作爲一種謙遜/戰術,聲稱「Hashmap不起作用」可能會讓一些人失去。更可能的是:自1998年以來幾乎在每個Java程序中都使用過的基本數據結構不起作用......或者您沒有正確使用它? – yshavit

回答

1

這段代碼有兩個問題。第一個iswith這一行:

frage.toLowerCase(); 

該方法返回一個字符串,它不會修改到位的字符串(因爲Java的String對象是不可改變的)。您可以使用frage.toLowerCase()作爲關鍵。

然後你有這樣一行:

ratschlagMap.get(frage); 

這個方法返回的關鍵frage值。但是你不用這個值做任何事情,甚至不把它分配給一個變量。這是一個錯誤。

+0

用於捕獲值的+1不會在任何地方,-1用於暗示傳入參數被突變和重新分配。 – Makoto

+0

@Makoto,你會怎麼做? – Macondo2Seattle

+0

在「get」的調用中 - 我們不關心其他任何地方的外殼。除此之外,假設你的字段是'最終'也是一種很好的形式,所以你不會冒着意外地改變可變值的風險(這可能是一個字符串,但你仍然不想冒這個風險) 。 – Makoto

2

如果你使用的是hashmap.get,你可能想要返回這個值。你也不需要檢查map是否包含這個元素 - 如果沒有找到值,它將返回null。看看下面的代碼:

public String frageStellen (String frage) 
{ 
    return ratschlagMap.get(frage.toLowerCase()); 
} 

你也可能應該閱讀更多關於Java語言......

0

我可能是錯的,但在您選擇的方法「frageStellen」你只做ratschlagMap.get(FRAGE) ;但你不把它保存到一個變量或返回它。

0

有幾個問題。

首先,字符串是不可變的 - 對它的任何操作都會創建一個新的String實例。如果你不希望它身邊,那麼你只能真正動態創建它,在你需要它:

if (ratschlagMap.containsKey(frage.toLowerCase())) 

其次,你不返回任何東西 - 你不聲明你的方法去做所以。關於Map#get()的事情是,如果該值不存在於傳入的密鑰中,它將返回null,這在您的情況下似乎是合理的。

這意味着它會更直白地寫這篇文章,因爲我們不需要真正檢查是否存在:

public String frageStellen(String frage) { 
    return ratschlagMap.get(frage.toLowerCase()); 
}