【发布时间】:2023-01-02 01:08:36
【问题描述】:
这有什么问题吗?具体来说,intCount.put(i, intCount.get(i)++) 有什么问题?
public static Map<Integer, Integer> countNumbers(List<Integer> list) {
Map<Integer, Integer> intCount = new TreeMap<>();
for (Integer i : list) {
if (intCount.get(i) == null) {
intCount.put(i, 1);
} else {
intCount.put(i, ++intCount.get(i));
}
}
return intCount;
}
另一方面,这有效
public static Map<Integer, Integer> countNumbers(List<Integer> list) {
Map<Integer, Integer> intCount = new TreeMap<>();
for (Integer i : list) {
if (intCount.get(i) == null) {
intCount.put(i, 1);
} else {
intCount.put(i, intCount.get(i) + 1);
}
}
return intCount;
}
这是否意味着我不能递增Integers,只能递增int原语?问题是当我像这样将 Integer 转换为其各自的原语(或者更确切地说,将 Integer 返回方法转换为其各自的原语)
intCount.put(i, ++(int)(intCount.get(i)));
它也不起作用!为什么?
Main.java:30: 错误:意外类型
intCount.put(i, ++(int)(intCount.get(i)));
^ 必需:变量
发现:值
1 个错误
【问题讨论】:
-
在第一种情况下,代码试图增加一个值/文字,而不是一个变量。前增量和后增量只能在变量上执行,而不能在值/文字上执行。
-
@Turing85 这很奇怪
-
提醒一下,前增量和后增量操作不仅仅意味着“加一”,它们调整一些变量。这里没有要修改的变量..
-
这样想:例如
1++的语义是什么?1是一个文字,没有什么可以“将值赋回”。或者,如果有的话,文字1现在将代表值2,这会令人困惑。