A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 陈圳 高级黑马   /  2013-2-5 14:52  /  2778 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 张向辉 于 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
表示疑惑...


评分

参与人数 1技术分 +1 收起 理由
Rancho_Gump + 1 新手鼓励,加油!

查看全部评分

6 个回复

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

点评

以后多多努力,.NET方向?  发表于 2013-2-6 14:02

评分

参与人数 1技术分 +1 收起 理由
Rancho_Gump + 1 赞一个!

查看全部评分

回复 使用道具 举报
:if(....) else if(...)判断的原理,上一个判断为真的时候,下面不执行。
:if(....){}  没有else语句,判断的原理,如果if为真,执行下面的语句
回复 使用道具 举报
你说的为什么结果只是: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. }
复制代码
希望能对你有帮助。

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报
图有点糙,不过应该能说明问题,道友明白否?

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

5.jpg

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报
if后面,你需要一个大括号把你想要执行的内容括号括起来,除非只有一条语句。

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报
杨芳 来自手机 中级黑马 2013-2-6 01:53:34
7#
顶!!!来自: Android客户端
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马