三元运算符中嵌套三元运算符

3

因此,在IT技术中,for循环等是非常常见的操作。但当我们遇到三目运算符的示例时,例如:

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

如何在问号后面添加另一个三元运算符,就像增强型三元运算符一样

问题:

给定两个整数值,返回较大的值。但是,如果这两个值被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 < b,则检查模数5是否相等。

尝试一下:a < b ? (a % 5 == b % 5 ? a : b) : a; 尚未测试。 - Maroun
5
能做并不代表一定要做,还需要考虑代码的可读性。 - adrianbanks
完全同意@adrianbanks的观点。明天你可能无法理解那段代码,更不用说其他人是否能够理解了。if语句存在的原因就在于此。 - luk2302
我同意,你不应该嵌套三元运算符。然而,如果你参加OCA考试,了解如何阅读/编写它们是有用的! - Nick Suwyn
2个回答

2
你有4种可能的结果:
  1. 如果a < b且两者具有相同的余数,则返回a。
  2. 如果a < b且它们没有相同的余数,则返回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吗? - Ankit Deshpande

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接