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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 戏言丶 于 2014-10-8 18:30 编辑


  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. }
复制代码

以上这段代码没有输出结果,按照本来自己的理解是会输出B的,在第一个判断条件不满足时就会执行到else,可是结果却不是这样,这是为什么呢?而若改成int m = 1,n = 2;则输出B;而如果int m = 1,n = 3;则输出A。

评分

参与人数 1黑马币 +3 收起 理由
杨佳名 + 3

查看全部评分

14 个回复

倒序浏览
问题很明显啊,你写的那个else明显被编译器当做了第二个if的else,修正也很简单,给第一个if加上大括号括起来就行了。

评分

参与人数 1黑马币 +3 收起 理由
杨佳名 + 3

查看全部评分

回复 使用道具 举报
水竹 发表于 2014-10-8 18:34
问题很明显啊,你写的那个else明显被编译器当做了第二个if的else,修正也很简单,给第一个if加上大括号括起 ...

修正我倒是知道,不过现在听你这么一说原来if...else在编译时就进行了配对。谢谢你的解答
回复 使用道具 举报
戏言丶 发表于 2014-10-8 19:05
修正我倒是知道,不过现在听你这么一说原来if...else在编译时就进行了配对。谢谢你的解答 ...

不谢,编译的时候要进行语法检查的,所以明确执行流程也是理所当然的。
回复 使用道具 举报
if 后面不是只有一个语句的时候,或者说不是只有一句话的时候,楼主是需要加上大括号的,不只是if ,else while for 等都是这样的,否则计算机会运行if 后面的第二句话,
回复 使用道具 举报
Eagle 发表于 2014-10-8 19:27
if 后面不是只有一个语句的时候,或者说不是只有一句话的时候,楼主是需要加上大括号的,不只是if ,else w ...

多条执行语句需要加大括号这个我知道,双重if判断时后面只有一个执行语句时并不需要大括号,只是这题中后面多了个else,else都是和if配对使用的,编译时就临近配对了,所以才会出现这样的结果,如果后面没有else并不需要大括号,还有双重for也是一样,若只在内for中出现一条语句也不需要大括号。
回复 使用道具 举报
Eagle 高级黑马 2014-10-8 20:26:08
7#
戏言丶 发表于 2014-10-8 20:18
多条执行语句需要加大括号这个我知道,双重if判断时后面只有一个执行语句时并不需要大括号,只是这题中后 ...

哟西,理解了。
回复 使用道具 举报
所以说括号很重要,没有事不要省略括号,那样写不会显得少写多少个字,如果代码多起来啊,调试的时候你就纠结了.
回复 使用道具 举报
liaorubei 发表于 2014-10-8 20:46
所以说括号很重要,没有事不要省略括号,那样写不会显得少写多少个字,如果代码多起来啊,调试的时候你就纠结了 ...

这个倒不是我写的,就是基础视频中的代码联系,看到了有些不理解拿出来问问而已
回复 使用道具 举报
1.  当有多个 if 和多个 else 混在一起,并且他们中间又没有添加大括号进行一目了然地区分时,else总是和他上方距离他最近的那个 if 配对使用,程序员不能被代码结构的缩进所误导(就像楼主举的这个例子那样存在可能误导人的缩进)。
2.  为使代码结构层次清晰,一目了然,建议必须对希望进行配对的 if 和 else 添加大括号。
回复 使用道具 举报
很明显的你这个else 是和第二个if构成了 if else语句。
回复 使用道具 举报
刘挺 中级黑马 2014-10-10 16:32:42
12#
上面的都答得好
回复 使用道具 举报
最好都写大括号以免出现问题
回复 使用道具 举报
写代码,真的是需要细心细心再细心
回复 使用道具 举报
一楼讲的很准确,if会和自己就近的else来配对的,所以不嫌麻烦的话就加上括号吧,熟练了就好点理解了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马