2013-11-28 37 views
2

有没有可能简化这个if语句?简化if语句?

如果是这样的答案是什么?

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

有四种可能的状态,其中只有一个结果,在声明中,你可以重写你的病情*不*正在执行...... –

回答

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

试一下:

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

这里的关键是*简化*。此外,这完全是空的。你的两个返回值都是一样的。 – christopher

+2

不引入错误也很好。 – Jon

+0

Lol我认为这可能会吸引一些人,这是一个漫长的夜晚,我的大脑无法绕过这个简单的问题,我们都在那里。 –

1

使用

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

正是如此,它结合了两个条件。

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

+0

I4r3nZu写的代码行数可能会简单得多。这种方式应该更容易阅读,但如果你要优雅,他说的是好的! –

+0

为您固定缩进。实际上,只需在移动网站上输入一个换行符后跟四个空格即可输入每行代码 - 我经常这样做。我认为你的意思是'> ='不'''。我会将其归咎于手机网站... – Floris

6

用布尔代数来思考这个问题。你有两个条件

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

你执行你的语句时

A * B 
/A 

(我用/A表示 “不是”,并*表示 “AND”)

所以,唯一的你不执行的时间是

A * /B 

这意味着你的陈述肩膀d是

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

或者,使用布尔身份

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

(/A + B) 

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