黑马程序员技术交流社区

标题: if语句的过程 [打印本页]

作者: 陈世涛    时间: 2012-7-12 18:32
标题: if语句的过程
高手分析一下,谢谢class Demo
{
        public static void main(String[] args)
        {
                int m=0,n=3;
                if(m>0)
               
                        if(n>2)
                                System.out.println("A");       
                else
                        System.out.println("B");
               
        }
}

作者: 刘勇军    时间: 2012-7-12 18:35
这个题是没有结果输出的,因为else语句是第二个if一体的,
if(m>0)//条件不满足
控制最近一条语句,而
if(n>2)
                                System.out.println("A");        
                else
                        System.out.println("B");
是一整条语句。
所以没有输出内容
作者: 丁二跃    时间: 2012-7-12 18:40
本帖最后由 丁二跃 于 2012-7-12 19:22 编辑

偶错了{:soso_e109:}   ……

作者: 朱东方    时间: 2012-7-12 18:45
class Demo
{
        public static void main(String[] args)
        {
                int m=0,n=3;
                if(m>0)   //条件满足执行if(n>2),不满足执行else。但这里没有和它配对的else。所以就没有结果了。
               
                        if(n>2)
                                System.out.println("A");        
                else   //else与离它最近的没有配对的if配对。
System.out.println("B");
               
        }
}
------------------------------------------------------------------------
class Demo
{
        public static void main(String[] args)
        {
                int m=0,n=3;
                if(m>0)
                {
                        if(n>2)
                                System.out.println("A");        
                else
                        System.out.println("B");
                }
        }
}

这两个一样

作者: 京鱼龙    时间: 2012-7-12 19:17
本帖最后由 罗京雨 于 2012-7-12 19:30 编辑

  public static void main(String[] args)
        {
                int m=0,n=3;
                if(m>0)   //m=0时,if语句中得出的是false,所以下面的没有执行。
                {}              //这里就相当于有一个默认的大括号,里面什么语句都没有,因为没有执行,所以看不到结果。

                    if(n>2)//这一段其实是if和else语句。是一个整体。因为上面的是false,所以这段不执行。
                                System.out.println("A");        
                else
                        System.out.println("B");
首先这个程序在java语法上是没有错误的,编译的时候能是运行的,但是没有结果。
作者: 汤密奕    时间: 2012-7-12 21:39
else与离它最近的if配对,即与if(n>2)配对
整个程序写规范一点,实际上是这样的:
        if(m>0)    //{}
        {        if(n>2)
                        System.out.println("A");        
                else
                        System.out.println("B");
        }
可以把if(m>0)的大括号拿掉,再把注释去掉,打印的就是A了,这样就比较好理解了
作者: 李志群    时间: 2012-7-12 22:09
程序思想:
这个程序里面 第一个 if和else是一整条语句的

if首先执行 判断 结果为false 执行离他最近的一条语句  if(n>2)没有执行。
而执行到下面的 else语句的时候 没有与之配对的if语句 所以 没有执行

这到题目答案是 可以编译通过  但是没有结果
class Demo2
{
        public static void main(String[] args)
        {
                int m=0,n=3;
                if(m>0)
                        if(n>2)
                        System.out.println("A")
                else
                        System.out.println("B");
               
        }
}

作者: 陆强强    时间: 2012-7-12 22:16
本帖最后由 陆强强 于 2012-7-12 22:23 编辑

int m=0,n=3;
                if(m>0) //这里的if省略了else,if不一定非要和else配对
               
                        if(n>2)
                                System.out.println("A");
      
                      else//说到底是这个else和哪个If配对的问题,最后结果来看是里面的if的
                        System.out.println("B");
所以说if和else配对是从里面向外面配对的
作者: 孙新强    时间: 2012-7-12 22:17
class Demo
{
        public static void main(String[] args)
        {
                int m=0,n=3;
                if(m>0)
               
                       // if(n>2)                              
                 System.out.println("A");        
                else
                        System.out.println("B");
               
        }
}

把程序这样改一下改一下, 给上面的程序对比一下,就应该明白了吧。
其实这就是 if....else语句问题,if和else配对,遵循的是就进原则
作者: 苑占丽    时间: 2012-7-12 22:18
{
         public static void main(String[] args)
         {
                 int m=0,n=3;
                 if(m>0)
                 
                        if(n>2)
                                 System.out.println("A");        
                else
                         System.out.println("B");
                 
        }
}这个是楼主的源代码,if else语句你并没有加大括号,他相当于一下我写的这个代码
class Demo{
         public static void main(String[] args)
         {
                 int m=0,n=3;
                 if(m>0){
                 
                        if(n>2)
                                 System.out.println("A");        
                    else
                         System.out.println("B");所以这一对判断语句,就必须在m>0的情况下才能执行,很显然m并不>0所以并没有输出结果

}

所以,如果想达到的输出结果的目的,请看下面的代码

class Demo
{
         public static void main(String[] args)
         {
                 int m=0,n=3;
                 if(m>0){
                 
                        if(n>2)
                                 System.out.println("A");
                          }else
                         System.out.println("B");
                 
        }
}
                 
        }
}此时会输出B.希望对你有所帮助。
作者: 韩伟    时间: 2012-7-12 22:23
高手分析一下,谢谢class Demo
{
         public static void main(String[] args)
         {
                 int m=0,n=3;
                 if(m>0)
                 
                        if(n>2)
                                 System.out.println("A");        
                else
                         System.out.println("B");
                 
        }
}这个程序不会有输出,
else语句是紧跟着上面相邻的if语句,该语句没有用{ }标记if的作用域,
所以else默认为是紧跟着if(n>2)的,由于第一个if(m>0)不满足条件,所以if(你》2)不会执行,那么跟他配对的else也不会执行。
作者: 杨敏    时间: 2012-7-12 22:34
按照楼主的代码书写格式,实际上你是写了一个if  else语句,if(m>0)和else是一整句,在这个语句当中又添加了一个if(n>2)语句对if(m>0)d情况进行进一步条件判断。

calss Demo
{
        public static void main(String[] args)
        {
                int m=0,n=3;
                if(m>0)
                {
                        if(n>2)
                        System.out.println("A");   
                  }                                 //要体现这样的思想,需要在这里添加{}
                else
                        System.out.println("B");
               
        }
}
作者: 耿立刚    时间: 2012-7-13 16:14
else根据就近原则跟临近的一个if配对,最好养成个写代码的好习惯,缩进好了很好分辨的,myeclipse里面有快捷键ctrl+shift+f会自动缩进好,格式化输出的,有图,有真相

1.png (7.23 KB, 下载次数: 37)

1.png

2.png (4.92 KB, 下载次数: 35)

2.png





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