【问题标题】:How to rewrite multiple ternary "? :" in terms of "if" statements?如何用“if”语句重写多个三元“?:”?
【发布时间】:2014-05-01 06:12:59
【问题描述】:

我明白:

value = (a > b) ? a : b;

等同于:

if (a > b)
  value = a;
else
  value = b;

但我无法理解这意味着什么:

EDIT(我之前用的例子不好,这是另一个例子的真实代码):

Tracker t = (trackerId == TrackerName.APP_TRACKER) ? analytics.newTracker(PROPERTY_ID)
      : (trackerId == TrackerName.GLOBAL_TRACKER) ? analytics.newTracker(R.xml.global_tracker)
          : analytics.newTracker(R.xml.ecommerce_tracker);

如何根据ifelse ifelse 重写最后一个等式?

【问题讨论】:

  • 这是不可编译的声明。
  • 好吧,这就是example。也许谷歌写了一些不可编译的东西,但似乎这些机会很渺茫。 编辑 字母 ad 和比较器 > 是我编造的,但我实际上只是在询问 ? :
  • 为了扩展@IvanBabanin 所说的,第一个条件意味着ab 不是boolean 变量,但这使得第二个条件的条件不完整。
  • 我认为每个人都忽略了实际问题的重点。我只想知道? :。我已经编辑了示例。
  • 一个好的起点是将这样的事情视为嵌套条件:<condition1> ? <something1> : (<condition2> ? <something2> : (<condition3> ? <something3> : <something4>))

标签: java


【解决方案1】:

您需要第二个条件才能使这个三元表达式起作用。

value = (a > b) ? a : (b > c) ? c : d;

那么它会变成:

if (a > b) {
    value = a;
} else if (b > c) {
    value = c;
} else {
    value = d;
}

在你的情况下:

if (trackerId == TrackerName.APP_TRACKER) {
    t = analytics.newTracker(PROPERTY_ID);
} else if (trackerId == TrackerName.GLOBAL_TRACKER) {
    t = analytics.newTracker(R.xml.global_tracker);
} else {
    t = analytics.newTracker(R.xml.ecommerce_tracker);
}

资源:

【讨论】:

  • 看起来你和@MadProgrammer 都有相同的答案。我只是和前一个一起去。感谢您的帮助。
  • @user2323030 没问题
  • 好吧,感谢你们两位的耐心和清晰度。
【解决方案2】:

所以基于example you linked

Tracker t = (trackerId == TrackerName.APP_TRACKER) ? analytics.newTracker(PROPERTY_ID)
      : (trackerId == TrackerName.GLOBAL_TRACKER) ? analytics.newTracker(R.xml.global_tracker)
          : analytics.newTracker(R.xml.ecommerce_tracker);

你似乎用它来生成value = (a > b) ? a : b ? c : d;,它可能更像value = (a == b) ? c : (a == d) ? e : f,它会读起来像......

Tracker t = null;
if (trackerId == TrackerName.APP_TRACKER) {
    t = analytics.newTracker(PROPERTY_ID);
} else if ((trackerId == TrackerName.GLOBAL_TRACKER)) {
    t = analytics.newTracker(R.xml.global_tracker);
} else {
    t = analytics.newTracker(R.xml.ecommerce_tracker);
}

【讨论】:

  • 好的,谢谢。这正是我要问的。我之前编的那个例子很糟糕,纯粹是因为我不懂? :
  • 这不是 Google 的一个很好的例子,因为它特别难以阅读,但我很高兴它有帮助。
【解决方案3】:

使用像 Eclipse 这样的 IDE,它提供了像 ifs 一样自动重写三元运算符的可能性。 Ctrl + 1 打开如下所示的快速修复。

【讨论】:

  • 哇!这是一个了不起的隐藏工具!谢谢! :)
  • 很酷的东西@cypressious
猜你喜欢
  • 2020-11-10
  • 1970-01-01
  • 2011-08-26
  • 1970-01-01
  • 2016-08-30
  • 1970-01-01
  • 2010-10-29
  • 2014-10-01
  • 1970-01-01
相关资源
最近更新 更多