我正在尝试解决这个问题,但无法找到正确的方法。
int a = 5, b = 10, c = 20;
int result = a < b ? a < c ? c : a : b;
Console.WriteLine(result);
请建议我如何计算此问题。
答案 0 :(得分:2)
如果你写下面的表达式,那么它会更清楚:
int result = (a < b ) ? ((a < c ) ? c : a) : b;
条件运算符是什么?
条件运算符(?:)根据布尔表达式的值返回两个值中的一个。以下是条件运算符的语法。
condition ? first_expression : second_expression;
有关此问题的进一步文档,请查看here。
现在,让我们在“论文”中进行计算:
a < b
是真的。因此,将评估条件a < c
。这种情况也是如此。因此,结果将等于存储到c
,20的值。这就是全部。
我有一个困惑。我读到三元运算符是正确的 联想。这是否意味着问题中的部分((a&lt; c)?c: a)应该先评估?请解释一下。
根据C#规范,conditional operator:
条件运算符是右关联的,意味着操作 从右到左分组。例如,表达式 形成一个? b:c? d:e被评估为? b:(c?d:e)。
答案 1 :(得分:0)
我认为你想要一个最大的数字。
int a = 5, b = 10, c = 20;
int result = a > b ? a > c ? a : c > b ? c : b : b > c ? b : c;
Console.WriteLine(result);
它等同于以下if-else条件。我已使用((...))
if (a > b) //((a > b ?)) a > c ? a : c > b ? c : b : b > c ? b : c
{
if (a > c) //a > b ? ((a > c ?)) a : c > b ? c : b : b > c ? b : c
{
result = a; //a > b ? a > c ? ((a)) : c > b ? c : b : b > c ? b : c
}
else if (c > b) //a > b ? a > c ? a ((: c > b ?)) c : b : b > c ? b : c
{
result = c; //a > b ? a > c ? a : c > b ? ((c)) : b : b > c ? b : c
}
else
{
result = b; //a > b ? a > c ? a : c > b ? c ((: b)) : b > c ? b : c
}
}
else if (b > c) //a > b ? a > c ? a : c > b ? c : b ((: b > c ?)) b : c
{
result = b; //a > b ? a > c ? a : c > b ? c : b : b > c ? ((b)) : c
}
else
{
result = c; //a > b ? a > c ? a : c > b ? c : b : b > c ? b ((: c))
}
如果您想要最小数字,请忽略>
。
int result = a < b ? a < c ? a : c < b ? c : b : b < c ? b : c;
答案 2 :(得分:0)
您提供的代码:
int a = 5, b = 10, c = 20;
int result = a < b ? a < c ? c : a : b;
Console.WriteLine(result);
转换为:
int a = 5, b = 10, c = 20;
int result;
if (a < b)
{
if (a < c)
{
result = c;
}
else
{
result = a;
}
}
else
{
result = b;
}
Console.WriteLine(result);
因此,问题是如果a小于b,则不检查b对c,则将结果设置为b。
如果您坚持使用三元运算符,则条件应为:
int result = a < b ? (a < c ? a : (b < c ? b : c)) : (b < c ? b : c);
翻译很简单。如果你想详细说明,请告诉我。