简化if语句?

时间:2013-11-28 22:40:57

标签: logic

是否可以简化此if语句?

如果是的话,答案是什么?

    if (type)
    {
        if(NdotL >= 0.0)
        {
            color   += Idiff + Ispec;
        }
    }
    else
    {
        color   += Idiff + Ispec;
    }

4 个答案:

答案 0 :(得分:6)

从布尔代数的角度考虑这个问题。你有两个条件

A = (type)
B = (NdotL >= 0.0 )

你在

时执行你的陈述
A * B
/A

(我使用/A表示“NOT A”,*表示“AND”)

所以你唯一没有执行的是

A * /B

这意味着您的陈述应为

if (!((type) && NdotL < 0.0 )) {
  // do your thing
}

或者,使用布尔标识

(A * B) = /(/A + /B)

你可以将你的条件重写为

( /A + B )

if ( !(type) || ( NdotL >= 0 ) ) {
   // do your thing
}

答案 1 :(得分:5)

if (!type || NdotL >= 0.0)
{
    color += Idiff + Ispec;
}

答案 2 :(得分:1)

使用

if (type && NdotL > 0.0){
   Blah....
} else {
   Buegh...
}

只是为了结合这两个条件。

对于缩进等真的很抱歉,但是这个网站的移动版本不允许你输入代码,我只是想帮你这么多XD!

答案 3 :(得分:0)

试试:

color+=(type && NdotL >= 0.0)? Idiff + Ispec:Idiff + Ispec;