bool stop = false;
int f1 = 1;
int f2 = 2;
int f3 = 0;
int sum = 2;
while (!stop)
{
f3 = f1 + f2;
sum += f3 % 2 == 0 ? f3 : 0; //THIS ONE
stop = f3 > 4000000 ? true : false;//AND THIS ONE.
f1 = f2;
f2 = f3;
}
什么是条件运算符?这是我第一次看到这样的事情。
答案 0 :(得分:14)
该行:
sum += f3 % 2 == 0 ? f3 : 0; //THIS ONE
与:
相同if (f3 % 2 == 0)
sum += f3;
else
sum += 0;
当然可以改写为
if (f3 % 2 == 0) sum += f3;
和行
stop = f3 > 4000000 ? true : false;//AND THIS ONE.
与
相同if (f3 > 4000000)
stop = true;
else
stop = false;
或者更好:
stop = f3 > 4000000;
答案 1 :(得分:5)
表达式
x = c ? a : b;
相当于
if (c)
x = a;
else
x = b;
此外,声明
stop = f3 > 4000000 ? true : false;
完全是多余的,可以简化为
stop = (f3 > 4000000);
(为了清晰起见,增加了Paretheses。)
答案 2 :(得分:4)
它被称为ternary operator。
答案 3 :(得分:2)
如果条件(左边的东西是真的,那么它使用第一个(前一个)如果不是它使用第二个(后面的东西:)。
int res = someCondition ? valueIfTrue : valueIfFalse;
请参阅:http://msdn.microsoft.com/en-us/library/ty67wk28%28VS.80%29.aspx
另一个你很快就会看到:
SomeClass res = someVariable ?? valueIfSomeVariableIsNull;
更新:,您可能需要:
while (!isMoreThan4Million)
{
f3 = f1 + f2;
bool sumIsEven = f3 % 2 == 0;
sum += sumIsEven ? f3 : 0;
isMoreThan4Million = f3 > 4000000;
f1 = f2;
f2 = f3;
}
答案 4 :(得分:2)
答案 5 :(得分:1)
http://msdn.microsoft.com/en-us/library/ty67wk28%28VS.80%29.aspx
它被称为三元运算符。它会评估之前的值:如果表达式在左边?是的 - 否则它会在:
之后评估值答案 6 :(得分:0)
它或多或少是一个紧凑的等价物,如果那么:
(condition) ? ifConditionIsTrueUseThisValue : ifConditionIsFalseUseThisValue ;
常用于进行条件值赋值:
variableName = (condition) ? valueIfConditionIsTrue : valueIfConditionIsFalse ;
简单的愚蠢示例,用于指定忽略零以下值的x值:
x = (x < 0) ? 0 : x ;
答案 7 :(得分:0)
如同原作一样精心编写,你可以进一步模糊它的意图:
int sum = 2;
for(int f1 = 1, f2 = 2, f3 = 0; !((f3 = (f1 + f2)) > 4000000); f1 = f2, f2 = f3)
sum += f3 * (~f3 & 1);
......或者......像普通人一样写下来:
int f1 = 1;
int f2 = 2;
int f3 = 0;
int sum = 2;
while( f3 <= 4000000 )
{
f3 = f1 + f2;
bool even = (f3 & 1) == 0;
if( even )
sum += f3;
f1 = f2;
f2 = f3;
}
...或......如果你喜欢它真的很简单:
int sum = 4613732;
即使重写了两次之后,我也无法做到这一点......无论如何,这是什么目的?
答案 8 :(得分:-2)
谓词?然后:否则