【问题标题】:HashMap.get() works in one snippet and does not work on another one why?HashMap.get() 在一个片段中起作用,而在另一个片段中不起作用,为什么?
【发布时间】:2020-07-01 02:34:42
【问题描述】:

我有一个像下面这样的哈希图,

static Map<String, Integer> map = new HashMap<String, Integer>() {
    {
    put("**", 15); //11 to 19 and 21 to 26
    put("*0", 2); // 1 and 2
    put("*1", 2);
    put("*2", 2);
    put("*3", 2);
    put("*4", 2);
    put("*5", 2);
    put("*6", 2);   
    put("*7", 1);  //1
    put("*8", 1); 
    put("*9", 1); 
    put("1*", 9); //1 to 9
    put("2*", 6); //1 to 6    
}};

我正在尝试从上面的地图中获取与“2*”相对应的值,例如,

方法 1

String string = "2*";
char[] ch = string.toCharArray();
map.getOrDefault(ch[0]+ch[1], 0);   //returns 0

方法 2

String string = "2*";
char[] ch = string.toCharArray();
map.getOrDefault(String.valueOf(ch[0])+String.valueOf(ch[1]), 0);  //returns 6

第一个 sn-p 总是返回“0”,而第二个可以返回正确的值。我不明白怎么做。有人能告诉我吗?

【问题讨论】:

    标签: java string hashmap char


    【解决方案1】:

    以下情况。

    String string = "2*";
    char[] ch = string.toCharArray();
    map.getOrDefault(ch[0]+ch[1], 0);  
    

    您正在添加ch[0] + ch[1]。字符添加为整数,这就是你 正在努力得到。 2* 的整数和。

    您可以通过执行以下操作将总和转换为字符连接:

    System.out.println(map.getOrDefault(""+ch[0]+ch[1], 0));
    

    【讨论】:

      【解决方案2】:

      原因是您从 char 数组中获取的值仍被视为 int 值,因此,您正在地图中搜索那些不存在的 char 值。在第二个示例中,您明确告诉您的地图获取地图中这些字符的字符串表示形式。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-10-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-08-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多