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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 史政法 中级黑马   /  2013-3-26 10:38  /  3470 人查看  /  13 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 史政法 于 2013-3-27 18:11 编辑
  1. class Demo
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 int m=0,n=3;
  6.                 if(m>0)

  7.                         if(n>2)
  8.                                 System.out.println("A");        
  9.                 else
  10.                         System.out.println("B");
  11.         }
  12. }
复制代码
为什么没有结果?
而且为什么在if(m>0)这条语句下面敲打两次回车写上int zzz = 5;编译会报错,但是写上System.out.println("随便写点什么");就没事情?
if如果不加大括号,到底属于什么情况?

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

13 个回复

倒序浏览
int设定常量应该放在if前面啊  放后面肯定失败

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1 鼓励鼓励

查看全部评分

回复 使用道具 举报
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(m>0) 而你的m=0,所以m>0就是false,if语句就不会执行了,就不会有结果了。

问题:而且为什么在if(m>0)这条语句下面敲打两次回车写上int zzz = 5;编译会报错,但是写上System.out.println("随便写点什么");就没事情?
回答:你的if(m>0)后面没有加{}表示是一个省略了括号的语句,那么只会执行它下面的第一条语句了。你敲了两个回车,就说明你的if(同>0)下面的第一条语句是空语句,
等效于:if(m>3){}
但是你在第一行写的是System.out.println("随便写点什么");这时就会执行第一行的数据,第一行为System.out.println("随便写点什么");有数据,所以就执行了。

注意:if(){}省略的括号后,只会执行与它紧接触的第一句。


评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
首先,if语句在不加大括号的情况下,默认执行之后的一个语句;
          加了大括号,就执行完大括号里面的所有代码以后再结束.

其次,else要跟离它最近的if配对,也就是说你的代码里else跟if(n>2)是一对.
        像你那样写,两条输出语句根本没机会执行到,所以没输出结果.

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 王维帝 于 2013-3-26 11:09 编辑

因为你第一个if语句下面没有执行语句,而条件又是错误的,所以不往下运行了。
第二个问题:
应该加上大括号
{ int zzz=5;}

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
这个问题我也纠结过,哥们if() 不加大括号,地下只能跟一句话,就是一条执行语句而已
至于为啥不运行结果,显而易见你的判断语句,有问题,在看看,
记住if() 不加大括号的事就行了

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 lixiaofeng 于 2013-3-26 12:55 编辑

没有结果是因为第一个if语句条件不满足且没有执行语句,加上int zzz = 5;也不能构成执行语句,所以第一个if语句就不往下执行了;后来你加上执行语句后,系统执行第一个if语句,条件不满足,继续执行第二个if语句,因为条件满足所以有结果。
回复 使用道具 举报
为什么在if(m>0)这条语句下面敲打两次回车写上int zzz = 5;编译会报错,但是写上System.out.println("随便写点什么");就没事情?

这两个不都是语句吗?为什么单独写int zzz = 5;就是挂,单独写System.out.println("随便写点什么");就OK呢?

而且加上大括号后,单独写int zzz = 5;也是OK的,单独写System.out.println("随便写点什么");也OK?

什么情况?
回复 使用道具 举报
if语句下面如果没有花括号,那么只执行语句下面的第一句话,第二句则不执行,所以你敲两下回车就相当于if下面什么也没有执行。
class Demo
{
        public static void main(String[] args)
        {
                int m=0,n=3;
                if(m>0)  //执行到这句的时候,条件不满足,并且没有执行语句,所有这句没有用

                        if(n>2) //然后开始执行这一句,条件满足
                                System.out.println("A"); //按说不该没有结果,至少这句应该输出 “A”;        
                else
                        System.out.println("B");  //这句没有输出
        }
}
回复 使用道具 举报
else与最近的if搭配。改代码相当于:
  1. class Demo
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 int m=0,n=3;
  6.                 if(m>0)
  7.                                 {
  8.                                          if(n>2)
  9.                                                   System.out.println("A");        
  10.                                          else
  11.                                                 System.out.println("B");
  12.                                 }
  13.         }
  14. }
复制代码
回复 使用道具 举报
其实很简单 你可以用eclipse编译器设置断点或者逐步编译看就能看出来
回复 使用道具 举报
if后不加大括号仅执行if之后的一行代码,加上大括号判断完后,如果条件满足就会执行大括号内所有内容。
int应该写在if语句前面,写在后面就先读if条件内容,后执行给ZZZ赋值,或者是打印输出的内容。这里你给ZZZ赋值有什么用没看明白
回复 使用道具 举报
楼主你好,此题考查的是if语句的特性,你这段代码的if语句后面没有加大括号,
当然你说的没有结果就是因为if条件表达式中的条件不满足,if语句后面的所有语句都不会执行了,除非加上了大括号。

首先我澄清一点,敲俩下回车与不敲回车没有区别的,只能解释为成员变量不能声明在不完整的if语句后面,而输出语句可以。
回复 使用道具 举报
if的使用,如果不加{},默认if下边的语句,你的整个程序都没有加{},所以,对于else会匹配最近的if,所以,第一个if不满足条件什么都没有输出,整个过程和第二个if   else 没有关系,我个人认为无论是循环,条件,最重要的是执行语句的顺序
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马