【问题标题】:I have trouble incrementing a variable. Why?我在递增变量时遇到问题。为什么?
【发布时间】: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,这会令人困惑。

标签: java increment


【解决方案1】:

intCount.get(i) 获取一个值,没有要递增的变量。无论如何,我会完全删除ifelse并使用Map.getOrDefault(Object, V)之类的

intCount.put(i, intCount.getOrDefault(i, 0) + 1);

【讨论】:

    猜你喜欢
    • 2010-11-30
    • 2021-03-30
    • 1970-01-01
    • 2011-07-21
    • 2022-01-14
    • 1970-01-01
    • 1970-01-01
    • 2012-10-25
    • 1970-01-01
    相关资源
    最近更新 更多