黑马程序员技术交流社区

标题: 为什么语句都能打印呢?什么情况下不加else就可以执行下... [打印本页]

作者: aerkadiya    时间: 2013-6-5 14:13
标题: 为什么语句都能打印呢?什么情况下不加else就可以执行下...
本帖最后由 aerkadiya 于 2013-6-7 21:12 编辑

import java.util.Scanner;
class ZuoYe0203
{
        public static void main(String[] args)
        {
                Scanner scan = new Scanner(System.in);
                int number=scan.nextInt();
                int a;
                int b;
                int c;
                int sum;
                if(number>=100 && number<=999)
                {
                        a=number/100;
                        b=(number-a*100)/10;
                        c=number-a*100-b*10;
                        sum=a*a*a+b*b*b+c*c*c;
                        if(sum==number)
                        {
                                System.out.println("这个数字是水仙花数");
                        }
                                System.out.println("这个数字不是水仙花数");        
                }
                        System.out.println("请输入一个三位数");
        }
}

为什么输入任意三位数字下面的三句话都能打印?
作者: w270307032    时间: 2013-6-5 14:46
if ....else 和if  的区别就在于,if ....else只会执行if和else其中的一部分语句,要么执行if的,要么执行else的,不会两个都执行。而if,是先判断如果if的条件为真,那么就执行if语句里面的内容,如果不满足条件则不执行,但是和if外的其它同级的其它语句,不管if条件是否为真假,都会被执行到。如楼主的代码:
如果输入的不是3位数,那么就不满足      if(number>=100 && number<=999),则它里面的System.out.println("这个数字是水仙花数")和System.out.println("这个数字不是水仙花数")不会被执行到,但是与它同级的System.out.println("请输入一个三位数"),肯定会被执行到的。
如果你输入的是个三位数,且满足if(sum==number)这个条件,则System.out.println("这个数字是水仙花数")被执行到,如果不满足if(sum==number)这个条件,则不会被执行到。但是与它同级的System.out.println("这个数字不是水仙花数");肯定会被执行到,比它高一级的System.out.println("请输入一个三位数")也肯定会被执行到。
如果加上else判断,则二者只能执行其一。
作者: 郑晓飞    时间: 2013-6-6 17:27
if不加{},只控制if后面的一条语句,加上{}控制{}中的语句。if单独使用语句结束后,后面的语句肯定会执行到了,if和else一起使用为判断语句,if执行则else不执行,否则也一样的。
建议你在if{}语句后加else{},另外最后的: System.out.println("请输入一个三位数"); 输出语句放在随机键盘输入数之前效果会不会更好点儿呢
作者: hx32    时间: 2013-6-7 09:23
本帖最后由 hx32 于 2013-6-7 09:25 编辑

  1. <P>class ZuoYe0203
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 Scanner scan = new Scanner(System.in);
  6.                 int number=scan.nextInt();
  7.                 int a;
  8.                 int b;
  9.                 int c;
  10.                 int sum;
  11.                 if(number>=100 && number<=999)
  12.                 {
  13.                         a=number/100;
  14.                         b=(number-a*100)/10;
  15.                         c=number-a*100-b*10;
  16.                         sum=a*a*a+b*b*b+c*c*c;
  17.                         if(sum==number)
  18.                         {
  19.                                 System.out.println("这个数字是水仙花数");
  20.                         }                       <FONT color=red> //if的执行范围到此终结,不影响下面的语句。if只控制最近的{}内的语句</FONT>                  
  21.                          System.out.println("这个数字不是水仙花数");        
  22.                 }
  23.                         System.out.println("请输入一个三位数");
  24.         }
  25. }</P>
  26. <P>//不会修改颜色,你看下第二十行。实际上楼上几位说的比我详细,我只是在具体编码后边标注了一下
  27. </P>
复制代码

作者: 刘凯    时间: 2013-6-7 09:37
问题解决了 标注 “已解决”




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