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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Style栉 中级黑马   /  2014-3-28 23:47  /  1258 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 Style栉 于 2014-3-29 00:50 编辑
  1.    class Demo{
  2.         
  3.         public static void main(String[] args){
  4.                 int num = 4;
  5.                 if( num > 0 ){
  6.                     int x = 10;
  7.                 }

  8.                 if( num > 0 )
  9.                    int x = 10;
  10.         
  11.         }
  12.    
  13.    }
复制代码

//感觉没有问题.可是编译却通不过

评分

参与人数 1黑马币 +2 收起 理由
枫儿 + 2 建议再好好看看视频

查看全部评分

3 个回复

倒序浏览
变量作用域出问题了,相当于定义了两次x。
错在第10行,要么第10行那个判断也改成上面那样:
  1.   if( num > 0 ){
  2.                          int x = 10;
  3.                 }
复制代码



要么改成这样:
  1.   int x = 10;
  2.                
  3.                 if( num > 0 ){
  4.                    x = 10;
  5.                 }
复制代码

评分

参与人数 1技术分 +1 收起 理由
枫儿 + 1 25分 恭喜

查看全部评分

回复 使用道具 举报
本帖最后由 xietansheng 于 2014-3-29 00:03 编辑

第10行没有意义,x不能成为一个变量,会引起歧义(第10行定义的x没有使用{ } 使其成为第9行的if的代码块中的局部变量,而是在main方法所在的代码块,如果第9行的if成立,则x成为main方法下直接的局部变量,后面可以使用;如果第9行的if不成立,则后面不能使用x,因此存在不确定性,引起歧义,编译不能通过),解决方法:将 第10行的变量x声明在第9行的if的上面或将第10行用{ }括起来,使其成为if代码块下的局部变量。

评分

参与人数 1技术分 +1 收起 理由
枫儿 + 1 赞一个!

查看全部评分

回复 使用道具 举报
linweiwen 发表于 2014-3-28 23:55
变量作用域出问题了,相当于定义了两次x。
错在第10行,要么第10行那个判断也改成上面那样:

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