黑马程序员技术交流社区

标题: 关于判断结果if(...)else if(...)的疑问 [打印本页]

作者: 陈圳    时间: 2013-2-5 14:52
标题: 关于判断结果if(...)else if(...)的疑问
本帖最后由 张向辉 于 2013-2-15 20:26 编辑

//习题3.4:计算n!的和 当n为2,4,6,8,10的结果;注0!=1;
class example3
{
        public static void main(String[] args)
        {
                int sum=1;
                for(int i=0;i<=10;i++)
                {
                        if(i==0)
                        {
                                sum=1;
                                sop(i+"!="+sum);
                        }
                        if(i>0)
                                sum*=i;
                        else if(i%2==0)
                                sop(i+"!="+sum);
                        /*if(i>0)
                        {
                                sum*=i;
                                if(i%2==0)
                                        sop(i+"!="+sum);
                        }*/
                }
        }
        public static void sop(Object obj)
        {
                System.out.println(obj);
        }
}
运行结果为:0!=1                   0!=1
注释内的运行结果是正确的,疑问:if(....) else if(...)判断的原理不是上一个if(...)满足,然后执行下面一个if(...)语句吗?
如果是if(...)不满足才执行下一个if(...)语句的话,是不会输入结果:0!=1                                                                                                  0!=1
表示疑惑...



作者: 刘明杰    时间: 2013-2-5 15:15
在if-else if语句中,只有当上一个条件不成立时,才会进入下一个if语句并进行if语句后面的条件判断。一旦有一个if后面的条件为ture,则执行此if所带的语句(块),语句(块)执行完成后,程序跳出if-else if结构。 如果所有的if条件都不成立,则执行最后的else所带的语句,如果最后没有else语句,则什么都不执行。

作者: 黑马-小龙    时间: 2013-2-5 20:52
:if(....) else if(...)判断的原理,上一个判断为真的时候,下面不执行。
:if(....){}  没有else语句,判断的原理,如果if为真,执行下面的语句
作者: 黄玉昆    时间: 2013-2-5 21:17
你说的为什么结果只是:0!=1   0!=1呢?我测试了,我发现,你的程序中的if(i>0)sum*=i;一直在运行计算着,但是并没有打印。
你的程序是这么运行的:
  i                     执行条件                          结果                                    注
i=0               if(i==0) sum=1;                 sum=1                        
                    sop(i+"!="+sum);            打印出0!=1
                            和
                    else if(i%2==0)                  sum=1
                    sop(i+"!="+sum);           打印出0!=1                   
i=1               if(i>0) sum *= i;              sum=1但没打印                   后面不不执行,i++后进行第二次循环
i=2到i=10    if(i>0) sum *= i;              sum=n!但没打印           直到i=10,else if(i%2==0)都没执行,结果为10!=3628800
但是注意,出了for循环不能使用写这条语句sop(i+"!="+sum);,因为i是局部变量,只定义在了for循环内
你要是想打印n!和n分别为2,4,6,8,10的结果,我改了改你的代码:
  1. class Example3
  2. {
  3.     public static void main(String[] args)
  4.     {
  5.        int sum = 1;
  6.        int sum1 = 1;
  7.        int i = 0;
  8.       for(;i<=10;i++)
  9.      {
  10.          if(i==0)
  11.            sop(i+"!="+sum);
  12.         else
  13.            sum*=i;
  14.         if(i%2==0 & i!=0)
  15.            sum1*=i;
  16.      }
  17.       sop((i-1)+"!="+sum);
  18.       sop("n为2,4,6,8,10的结果:" + sum1);
  19.     }

  20.     public static void sop(Object obj)
  21.    {
  22.        System.out.println(obj);
  23.    }
  24. }
复制代码
希望能对你有帮助。

作者: 朱玉玺    时间: 2013-2-5 21:56
图有点糙,不过应该能说明问题,道友明白否?

5.jpg (89.43 KB, 下载次数: 57)

5.jpg

作者: dzr19850306    时间: 2013-2-5 22:45
if后面,你需要一个大括号把你想要执行的内容括号括起来,除非只有一条语句。
作者: 杨芳    时间: 2013-2-6 01:53
顶!!!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2