【问题标题】:Ternary within a ternary三元中的三元
【发布时间】:2015-12-26 10:02:09
【问题描述】:

所以有 for 循环等是很常见的,但是当我们有一个三元示例时,例如

int answer = (a < b) ? b : a;

我们如何在 之后再放一个三元组?就像一个增强的三元组

问题:

给定两个 int 值,返回较大的值。但是,如果两个值除以 5 时具有相同的余数,则返回较小的值。但是,在所有情况下,如果两个值相同,则返回 0。注意:% "mod" 运算符计算余数,例如7 % 5 等于 2。

maxMod5(2, 3) → 3
maxMod5(6, 2) → 6
maxMod5(3, 2) → 3

我的想法:

public int maxMod5(int a, int b) {
      int answer = ((a < b) ? (a % 5 == b % 5) ? a : b) : a;
}

如果a

【问题讨论】:

  • a &lt; b ? (a % 5 == b % 5 ? a : b) : a;没测试,试试看。
  • 仅仅因为你可以并不意味着你应该。还要考虑生成代码的可读性。
  • 同意@adrianbanks 100%。明天你将无法理解该代码。甚至没有谈论过其他人理解该代码。 if-statment 的存在是有原因的。
  • 我同意,你不应该嵌套三元运算符。但是,如果您参加 OCA 考试,知道如何读/写它们会很有用!

标签: java ternary


【解决方案1】:

你有 4 种可能的结果:

  1. a 返回 a
  2. a 返回 b
  3. a > b 并且两者具有相同的余数 -> 返回 b
  4. a > b 并且它们没有相同的余数 -> 返回 a

a == b时返回哪个都无所谓。

int answer = (a < b) ? ((a % 5 == b % 5) ? a : b) : ((a % 5 == b % 5) ? b : a);

编辑:

当两个数字相同时,我错过了返回 0 的要求。这需要一点补充:

int answer = a==b ? 0 : (a < b) ? ((a % 5 == b % 5) ? a : b) : ((a % 5 == b % 5) ? b : a);

【讨论】:

  • 根据问题陈述不应该在两个值相等时返回0吗?
【解决方案2】:
int ans = (a == b) ? 0 : ((a % 5 == b % 5) ? ((a<b)?a:b) : ((a>b)?a:b));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-07
    • 2017-01-08
    • 2016-12-09
    • 2021-10-06
    • 1970-01-01
    • 2011-02-06
    • 2014-10-06
    • 2014-12-01
    相关资源
    最近更新 更多