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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 陈世涛 中级黑马   /  2012-7-12 18:32  /  2756 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

高手分析一下,谢谢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");
               
        }
}

12 个回复

倒序浏览
这个题是没有结果输出的,因为else语句是第二个if一体的,
if(m>0)//条件不满足
控制最近一条语句,而
if(n>2)
                                System.out.println("A");        
                else
                        System.out.println("B");
是一整条语句。
所以没有输出内容

评分

参与人数 1技术分 +1 收起 理由
黑马张扬 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 丁二跃 于 2012-7-12 19:22 编辑

偶错了{:soso_e109:}   ……
回复 使用道具 举报
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: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语法上是没有错误的,编译的时候能是运行的,但是没有结果。
回复 使用道具 举报
else与离它最近的if配对,即与if(n>2)配对
整个程序写规范一点,实际上是这样的:
        if(m>0)    //{}
        {        if(n>2)
                        System.out.println("A");        
                else
                        System.out.println("B");
        }
可以把if(m>0)的大括号拿掉,再把注释去掉,打印的就是A了,这样就比较好理解了
回复 使用道具 举报
程序思想:
这个程序里面 第一个 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: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配对是从里面向外面配对的
回复 使用道具 举报
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配对,遵循的是就进原则
回复 使用道具 举报
{
         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.希望对你有所帮助。
回复 使用道具 举报
高手分析一下,谢谢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也不会执行。
回复 使用道具 举报
按照楼主的代码书写格式,实际上你是写了一个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");
               
        }
}
回复 使用道具 举报
else根据就近原则跟临近的一个if配对,最好养成个写代码的好习惯,缩进好了很好分辨的,myeclipse里面有快捷键ctrl+shift+f会自动缩进好,格式化输出的,有图,有真相

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

1.png

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

2.png

评分

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

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马