计算三元运算的输出

时间:2015-09-05 07:34:46

标签: c# ternary-operator

我正在尝试解决这个问题,但无法找到正确的方法。

int a = 5, b = 10, c = 20; 
int result = a < b ? a < c ? c : a : b; 
Console.WriteLine(result);

请建议我如何计算此问题。

3 个答案:

答案 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);

翻译很简单。如果你想详细说明,请告诉我。