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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 高境 金牌黑马   /  2012-12-20 20:50  /  2603 人查看  /  13 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 高境 于 2012-12-21 16:11 编辑

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对应,为什么没有结果?

评分

参与人数 1黑马币 +20 收起 理由
Fateˉ似命守护 + 20 赞一个!

查看全部评分

13 个回复

正序浏览
else总是与离它最近的if配对!这是原则
回复 使用道具 举报
1,if else 就近配对的原则
2,如果你搞不明白,把代码写的规范些,加上几个{}会方便让你看清代码
3,没有执行 是因为你的变量m=0;if(m>0) 这个条件为false,所以后面的代码是不会执行的,
回复 使用道具 举报
陈雪平 发表于 2012-12-20 21:59
else总是与离自己最近的那个if配对,所以此段代码的else与第二个if对应

就这女的回答靠谱
回复 使用道具 举报
不加{}的话,一般来说,最后一个if和紧接着的else是一对的
回复 使用道具 举报
崔政 中级黑马 2012-12-21 00:00:35
11#
这是if else 的简写形式,当if或else下面只有一条语句的时候,可以省略花括号。
何为一条语句,比如说一个分号结束,或者你现在写的if else。else总是和他最近的成对。
包括try catch代码开,虽然占好几行,也是算一条语句。。说的有点荒唐,不过事实如此。。

举例:
  1. class Test{
  2.         public static void main(String[] args) {
  3.                 if(2>1)
  4.                         try{
  5.                                 System.out.println("2>1");
  6.                                 }catch(Exception e){
  7.                                         System.out.println(e.toString());
  8.                                 }
  9.                
  10.         }
  11. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1

查看全部评分

回复 使用道具 举报
我想说的是你的需求是什么...可以理解是评等级吗?if m>0 且 n>2 是“A”...
                                                         else 是:“B”的....
按这个需求的话你要该代码...
小弟乱说,见谅!
回复 使用道具 举报
王瀛 高级黑马 2012-12-20 23:10:00
9#
if和else是配对出现的,其遵循的是“就近”原则,即:在代码中找到第一个else,然后向上找,出现的离这个else最近的if就是与其配对的。

在这个代码中if(n>2)与else是一对。

第一个if(m>0)没有与之配对的else。
但是jvm在读代码的时候,首先读取了if(m>0),而前面代码中m=0。故判断结果为false,于是后面代码不会执行,所以没有结果。

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1

查看全部评分

回复 使用道具 举报
就近。{:soso_e141:}
回复 使用道具 举报
1、else配对是遵循就近原则,所以可以看出你的else是和第二个if配对的,
2、没有结果是因为你的一个条件m>0,没有满足所以下面的这个if是跳过的,又因为这个if和下面的else是一起的,所以这里的if和else是不会被执行到的。
3、看你以前回答题目觉得你肯定懂这个的。一般代码要是这样写是不符合规范的吧。考试可能会有这样的题目,但是实际应用中希望我们就按照老师说的去做吧。

评分

参与人数 1技术分 +1 收起 理由
崔政 + 1

查看全部评分

回复 使用道具 举报
else与离它最近的那个if配对,这道题第一个if判断m是否大于0,
结果判断为false,接下来的一行代码也就是第二个if就不会执行了,else也就不会执行。
因此,没有任何结果。

评分

参与人数 1技术分 +1 收起 理由
崔政 + 1

查看全部评分

回复 使用道具 举报
else总是与离自己最近的那个if配对,所以此段代码的else与第二个if对应
回复 使用道具 举报
本帖最后由 田向向 于 2012-12-20 21:25 编辑

   。        
回复 使用道具 举报
本帖最后由 王小聪 于 2012-12-20 21:03 编辑

您好,您的else是和第二个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");
   }
}
}
因为你第一个条件m=0,你的判断是m>0,直接就是false了,所以里面没走,所以没有结果
简单来说就是跳过了下面 的代码

评分

参与人数 1技术分 +1 收起 理由
奋斗的青春 + 1 赞一个!

查看全部评分

回复 使用道具 举报
本帖最后由 王小聪 于 2012-12-20 23:07 编辑

您好,您的else是和第二个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");
   }
}
}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马