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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 雷丹 中级黑马   /  2013-10-23 23:27  /  1627 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

/ legal  
for (int i = 0; i <= N; i++) {  
    int x = 5;  
}  
// illegal
for (int i = 0; i <= N; i++)  
    int x = 5;

为什么第二种情况省略了大括号会报错

评分

参与人数 1技术分 +1 收起 理由
杨增坤 + 1

查看全部评分

7 个回复

倒序浏览
public static void main(String args[]) {
                int N=8;
                for (int i = 0; i <= N; i++) {  
                    int x = 5;  
                }  
                // illegal
                int x;
                for (int i = 0; i <= N; i++)  
                     x = 5;
        }

这样就正确了,
要是这样
for (int i = 0; i <= N; i++)                           int   x = 5;
   这样 不正确,我感觉是:这样是在内存中不断的创建同一个变量,所以 会出错,  但是用上面的那个情况,内存中只有一个x变量,只是循环的更改其值,所以不会错,我认为是这样的,希望对你有帮助!



评分

参与人数 1技术分 +1 收起 理由
周志龙 + 1 赞一个!

查看全部评分

回复 使用道具 举报
本帖最后由 我能学编程吗 于 2013-10-23 23:43 编辑

厉害,这样的问题都能碰出来!
我也不知道这是为什么,不过,我觉得这个问题有人回答是最好了,如果没人能回答的话,也就算了,没必要知道为什么,因为从你代码看就是做无用功,为了省代码,我把for换成if,问题是一样的:
if (true) {
        int x = 5;
}
System.out.println(x); // 报错,无法访问x

你上面的代码就是这样做了无用功,所以我说如果没人回答你的话就算了,知道了也没什么用。

正确的写法应该是:
int x = 0;
if (true) x = 5;
System.out.println(x);
这里我也没加{},但是也不会报错。换成for也一样的。

评分

参与人数 1技术分 +1 收起 理由
周志龙 + 1 赞一个!

查看全部评分

回复 使用道具 举报
请先看for循环语句的语法结构:

for(表达式1;表达式2;表达式3){
语句序列;
}
  1. 1
  2. for (int i = 0; i <= N; i++) {
  3. int x = 5;
  4. }


  5. 2
  6. for (int i = 0; i <= N; i++)
  7. int x = 5;
复制代码
第二种语句定义不完整,自然报错。

评分

参与人数 1技术分 +1 收起 理由
周志龙 + 1 赞一个!

查看全部评分

回复 使用道具 举报
本帖最后由 我能学编程吗 于 2013-10-24 01:38 编辑
魏-玉-彪 发表于 2013-10-24 00:50
请先看for循环语句的语法结构:

for(表达式1;表达式2;表达式3){

我反对您的观点。
我个人觉得:
语句序列并不是说就要写一系列的语句,写个空语句都行的,如下的都不会报错:
for (int i = 0; i < 5; i++)
                        ;
这样不加括号就证明了for后面只能有一个语句。而这个语句改用:int x = 5的话,虽然这是一个完整的语句,但是没有用,是无用功,没人能访问得到变量x,那么定义有什么用。
回复 使用道具 举报
楼主你好,如果问题已解决请将帖子状态修改为提问结束,

如果未解决请继续提问,谢谢合作

修改方法请看解释帖:http://bbs.itheima.com/thread-89313-1-1.html
回复 使用道具 举报
因为for循环也是一个完整的语句,如果你没有给大括号,那么你就应该给给分号,告诉java编译器,for循环到这结束了,不然有头没尾,语法当然说不过去
回复 使用道具 举报
小夕 初级黑马 2013-10-26 07:12:47
8#
定义作用域不完整,写java代码一定要注意作用域的范围完整。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马