【问题标题】:Why my if else statement (i.e. ? : ) does not work?为什么我的 if else 语句(即 ? : )不起作用?
【发布时间】:2016-07-05 21:15:30
【问题描述】:

我是 Java 新手,正在尝试学习简写 if-else 语句的概念。

我想出了下面的代码。但是,代码不会编译并在 if-else (即 ? : )语句旁边显示错误。

有人可以告诉我为什么它不起作用吗?

对不起,如果我的问题对你们中的某些人来说听起来很愚蠢。我是 Java 新手。

提前感谢您的帮助!

List<String> ls1 = new LinkedList<>(Arrays.asList("hello", "world", "morning", "world"));
Map<String, Integer> msi1 = new LinkedHashMap<>();

for(String s1 : ls1){
    Integer i1 = msi1.get(s1);
    i1 == null ? msi1.put(s1, i1) : msi1.put(s1, i1 + 1));//why can't I use the short if-else statement like this.
}

【问题讨论】:

  • 你收到了什么错误?
  • 您不能使用不返回结果的三元组,在这种情况下,您将忽略来自putboolean。它不能按您预期工作的原因很简单,如果 i1 == null 然后 msi1.put(s1, null) 这可能不是您想要的。
  • 让我指点你herehere
  • 顺便说一句,您不需要在此代码中使用 LinkedList - 您可以直接迭代 Arrays.asList("hello", "world" /* etc */)

标签: java if-statement


【解决方案1】:

三元表达式

condition ? when-true : when-false

是一个表达式,不是语句,所以不能用在需要语句的地方。

你可以这样写:

msi1.put(s1, (i1 == null) ? i1 : i1 + 1);

因为这是一个声明。

【讨论】:

  • 非常感谢!现在我明白了!只要允许我就会打勾。 :)
  • 我不认为真正的价值是正确的——我认为它应该是1,否则它只会永远停留在null。 (不过,这是从 OP 的代码中复制的)
【解决方案2】:

我不确定您要做什么,如果您尝试使用其键识别映射中某个值的出现次数,那么您应该这样做

基本上将提取物')'移到最后,您应该始终分配三元运算符的输出。

Integer test = i1 == null ? msi1.put(s1,1) : msi1.put(s1, i1 + 1);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-30
    • 1970-01-01
    相关资源
    最近更新 更多