h是一个哈希映射(泛型字符,整数)。 第一个示例有效,但第二个示例抛出了错误的结果(未正确递增)。为什么呢?
正确
if (h.containsKey(c)) {
h.put(c, h.get(c)+1);
}
else {
h.put(c, 1);
}
错
if (h.containsKey(c)) {
int value = h.get(c);
h.put(c, value++);
}
else {
h.put(c, 1);
}
答案 0 :(得分:2)
您正在使用后递增,您的变量将传递给函数,并且仅在递增后
h.put(c, ++value);
这是预增量的语法,在将变量传递给get
调用之前递增变量
答案 1 :(得分:2)
你真的在这里误导了++
。你不想增加变量,你只想使用它的值加一:
h.pus(c, value + 1)
请注意,value++
会增加value
,但会返回原始值,这就是您看到不同结果的原因。
虽然使用++value
也解决了这个问题,但它仍然是对++
的误用。
答案 2 :(得分:2)
preIncrement (++x)
和postIncrement (x++)
不同。
并且您正在使用第二个,它将在执行指令后立即更改x
的值。
因此,在h.put(c, value++);
行中,您将value
放入h
哈希映射,然后增加其值。
但是当你想将value + 1
添加到hashmap时,你必须这样写:
h.put(c, ++value);
因此它首先增加value
,然后将其放入HashMap。
答案 3 :(得分:1)
在这种情况下,您将密钥c
的值设置为hashmap
,因为value++
将在执行函数put
后进行评估。
if (h.containsKey(c)) {
int value = h.get(c);
h.put(c, value++); // should be h.put(c,++value) or h.put(c,value+1)
}
else {
h.put(c, 1);
}
尝试使用++value
代替value+1
在java中有两种类型的递增函数,一种是postfix
和prefix
。
postfix - value++
将返回value
和do增量操作
prefix - ++value
将执行递增操作,然后返回递增值
同样的故事是减少
答案 4 :(得分:0)
使用value++
,在将value
传递给函数后将其分配给value
,因此在增量之前使用的value
变量将是{{1}}变量。