不明白这个哈希映射增量语法
Don't understand this hash map increment syntax
h 是一个 Hash Map(泛型 Character,Integer)。
第一个示例有效,但第二个示例抛出错误结果(未正确递增)。为什么?
正确
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);
}
您正在使用 post-increment,您的变量被传递给函数并且仅在此之后递增
h.put(c, ++value);
这是预递增的语法,它在将变量传递给 get
调用之前递增变量
你真的在误用 ++
。您不想增加变量,只想使用它的值加一:
h.pus(c, value + 1)
请注意,value++
会增加 value
,但 return 会增加其 原始 值,这就是您看到不同结果的原因。
虽然使用 ++value
也解决了问题,但它仍然是对 ++
的误用。
使用 value++
时,您将其传递给函数后分配给 value
,因此使用的 value
变量将是递增之前的 value
变量。
在这种情况下,您将键 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++
wll return value
和做增量操作
prefix - ++value
将进行递增操作,然后 return 递增值
相同的故事是递减
preIncrement (++x)
和postIncrement (x++)
不同。
而你正在使用第二个,它将在执行指令后立即更改 x
的值。
因此,在 h.put(c, value++);
行中,您将 value
放入 h
哈希映射,然后增加其值。
但是因为你想把value + 1
加到hashmap中,你必须这样写:
h.put(c, ++value);
所以先增加value
,然后放入HashMap
h 是一个 Hash Map(泛型 Character,Integer)。 第一个示例有效,但第二个示例抛出错误结果(未正确递增)。为什么?
正确
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);
}
您正在使用 post-increment,您的变量被传递给函数并且仅在此之后递增
h.put(c, ++value);
这是预递增的语法,它在将变量传递给 get
调用之前递增变量
你真的在误用 ++
。您不想增加变量,只想使用它的值加一:
h.pus(c, value + 1)
请注意,value++
会增加 value
,但 return 会增加其 原始 值,这就是您看到不同结果的原因。
虽然使用 ++value
也解决了问题,但它仍然是对 ++
的误用。
使用 value++
时,您将其传递给函数后分配给 value
,因此使用的 value
变量将是递增之前的 value
变量。
在这种情况下,您将键 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++
wll return value
和做增量操作
prefix - ++value
将进行递增操作,然后 return 递增值
相同的故事是递减
preIncrement (++x)
和postIncrement (x++)
不同。
而你正在使用第二个,它将在执行指令后立即更改 x
的值。
因此,在 h.put(c, value++);
行中,您将 value
放入 h
哈希映射,然后增加其值。
但是因为你想把value + 1
加到hashmap中,你必须这样写:
h.put(c, ++value);
所以先增加value
,然后放入HashMap