找回密码
 注册会员
查看: 701|回复: 0

for循环条件顺序的问题

[复制链接]
发表于 2010-1-4 13:29:55 | 显示全部楼层 |阅读模式
<p>for循环条件顺序的问题</p>
<p><img src="http://img.baidu.com/img/iknow/icn_point.gif"> 悬赏分:50 -</p>
<p>解决时间:2010-1-4 13:27</p>
<p><script type="text/javascript"></p>
<p>function myfunction(nob)</p>
<p>{</p>
<p>if ((nob%400==0) &#73;&#73; (nob%100!=0) && (nob%4==0))</p>
<p>return 1;</p>
<p>else</p>
<p>return 0;</p>
<p>}</p>
<p></script></p>
<p><script type="text/javascript"></p>
<p>var a = Math.floor(prompt ("请输入您的出生年份","3200"));</p>
<p>var i;</p>
<p>for (i=a;i<=3200;i++)</p>
<p>{</p>
<p>if (myfunction(i)==1)</p>
<p>{</p>
<p>document.write(i+" ");</p>
<p>}</p>
<p>}</p>
<p></script></p>
<p>这是一段判断是不是闰年的代码的中的一段,其是中 if ((nob%400==0) &#73;&#73; (nob%100!=0) && (nob%4==0))与if ((nob%100!=0) && (nob%4==0) &#73;&#73; (nob%400==0))位置不一样,后者会判断不了2000年不是闰年,哪位前辈能告诉我原因呀。。。</p>
<p>问题补充:</p>
<p>if ((nob%400==0) &#73;&#73; (nob%100!=0) && (nob%4==0))</p>
<p>这个顺序中是首先是通过(nob%400==0) &#73;&#73; (nob%100!=0)对百年位的条件进行判断,再对非百年位的年份进行判断;而((nob%100!=0) && (nob%4==0) &#73;&#73; (nob%400==0))中对条件判断混淆,导致程序判断BUG。</p>
<p>提问者: 77604126 - 一级</p>
<p>最佳答案</p>
<p>逻辑运算符 && &#73;&#73; 是从左往右算的(先算&&后算&#73;&#73;),但程序会进行逻辑简化</p>
<p>比如:A && B,如果A为假就不会计算B。</p>
<p>A &#73;&#73; B,如果A为真就不会计算B。</p>
<p>先看 (nob%400==0) &#73;&#73; (nob%100!=0) && (nob%4==0),如果是400的倍数直接返回true是闰年,否侧才会测试是不是(是4但不是100的倍数)返回是否闰年。所以(nob%100!=0) && (nob%4==0)之前还隐含了nob%400!=0这个条件。</p>
<p>再看 (nob%100!=0) && (nob%4==0) &#73;&#73; (nob%400==0),如果是(是4但不是100的倍数)还要测试是不是400的倍数(但这个测试恒真),返回是闰年。</p>
<p>所以与第一句等效的是:</p>
<p>(npb%400!=0)&& (nob%100!=0) && (nob%4==0) &#73;&#73; (nob%400==0)</p>
<p>0</p>
<p>回答者:</p>
<p>swordlance - 二级   2010-1-4 13:18</p>
<p>我来评论>></p>
<p>提问者对于答案的评价:</p>
<p>非常详细的答案,让我茅塞顿开。。。</p>
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

QQ|文字版|手机版|小黑屋|襄阳城

GMT+8, 2025-8-4 16:59

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表