2014-10-27 48 views
0

我正在嘗試使用Hashmap製作26個鍵值對的字典。我試圖將字母表中的每個字母連接到一個數字,然後遍歷一個字符串並逐字母地從HashMap中打印字母值。試圖使用HashMap將字母與數字相關聯

這是我的嘗試:當編譯

import java.util.*; 

public class HashDemo { 
    public static void main(String[] args) { 
    HashMap hm = new HashMap(); 
    hm.put("a", 2); 
    hm.put("b", 3); 
    hm.put("c", 5); 
    hm.put("d", 7); 
    hm.put("e", 11); 

    String word = new String("bed"); 
    char arr[] = word.toCharArray(); 
    for(char c: word) { 
     System.out.println(hm.get(c)); 
    } 
    } 
} 

我的輸出是:

Note: HashMapDemo.java uses unchecked or unsafe op 
Note: Recompile with -Xlint:unchecked for details. 
1 error 

我當想運行輸出是:

Null 

我不知道爲什麼它無法在散列映射中找到該字母。是否因爲hashmap鍵是字符串而不是字符?如果這是我不知道該怎麼辦。

回答

3

你應該通過字符串不燒焦。由於地圖中獲取價值包含Strings.c是。通過使用字符串c+"",你可以把它改成String.and串聯一個char也char c: word是不正確的應該是char c: arr因爲字ISN 「T A陣列,它只是一個String.and你可以使用String.valueOf(c);也輪到的char字符串

變化

hm.get(c) 

String.valueOf(c) 

hm.get(Character.toString(c)) 

hm.get(c+"") 


HashMap hm = new HashMap(); 
    hm.put("a", 2); 
    hm.put("b", 3); 
    hm.put("c", 5); 
    hm.put("d", 7); 
    hm.put("e", 11); 

    String word = new String("bed"); 
    char arr[] = word.toCharArray(); 
    for(char c: arr) { 
     System.out.println(hm.get(String.valueOf(c))); 
    } 
+1

這將修復它。但沒有+1,因爲a)在HashMap上缺少泛型類型,b)使用String構造函數,c)'c +「」'而不是'String.valueOf()';-) – Thilo 2014-10-27 00:31:26

+2

@Thilo但我已經聲明瞭很多方法將字符轉換爲字符串。是的,我將主字符轉換爲Character.toString(c); – 2014-10-27 00:34:14

0

你應該重複ARR i.o.字。而映射的關鍵是Java對象。 試試這個

public static void main(String[] args) { 
     Map<String, Integer> hm = new HashMap<String, Integer>(); 
     hm.put("a", 2); 
     hm.put("b", 3); 
     hm.put("c", 5); 
     hm.put("d", 7); 
     hm.put("e", 11); 
     String word = new String("bed"); 
     char arr[] = word.toCharArray(); 
     for (char c : arr) { 
      System.out.println(hm.get(String.valueOf(c))); 
     } 
    } 
1

的這裏的問題是,你的HashMap包含String鍵,但你試圖從它那裏得到一個Character

您可以通過按鍵字符以及解決它:

Map<Character, Integer> hm = new HashMap<Character, Integer>(); 
hm.put('a', 2); 
hm.put('b', 3); // Note the single quotes ! 
hm.put('c', 5); 
hm.put('d', 7); 
hm.put('e', 11); 

String word = "bed"; 
for(char c: word.toCharArray()) { 
    System.out.println(hm.get(c)); 
} 

另外請注意,我輸入的HashMap。這是強烈建議的,如果你不這樣做,編譯器甚至會發出警告。但是,在這種情況下,改進的類型檢查不會遇到您的錯誤,不幸的是(您仍然可以使用任何東西,而不僅僅是鍵類型)致電get

+0

+1爲您的常識答案。並抱歉編輯你的帖子:) – 2014-10-27 00:38:48

+0

這是錯誤的,因爲字符c:字 – 2014-10-27 00:43:15

+0

非常感謝。你知道我怎麼可以加上字母值而不是打印它們? – user3591815 2014-10-27 01:00:05

相關問題