黑马程序员技术交流社区

标题: 关于for循环 [打印本页]

作者: 雷丹    时间: 2013-10-23 23:27
标题: 关于for循环
/ legal  
for (int i = 0; i <= N; i++) {  
    int x = 5;  
}  
// illegal
for (int i = 0; i <= N; i++)  
    int x = 5;

为什么第二种情况省略了大括号会报错
作者: 杨增坤    时间: 2013-10-23 23:39
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变量,只是循环的更改其值,所以不会错,我认为是这样的,希望对你有帮助!




作者: 我能学编程吗    时间: 2013-10-23 23:41
本帖最后由 我能学编程吗 于 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也一样的。

作者: 魏-玉-彪    时间: 2013-10-24 00:50
请先看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;
复制代码
第二种语句定义不完整,自然报错。
作者: 我能学编程吗    时间: 2013-10-24 01:37
本帖最后由 我能学编程吗 于 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,那么定义有什么用。
作者: 乔兵    时间: 2013-10-25 08:20
楼主你好,如果问题已解决请将帖子状态修改为提问结束,

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

修改方法请看解释帖:http://bbs.itheima.com/thread-89313-1-1.html
作者: Jim-剣◆﹏    时间: 2013-10-26 00:26
因为for循环也是一个完整的语句,如果你没有给大括号,那么你就应该给给分号,告诉java编译器,for循环到这结束了,不然有头没尾,语法当然说不过去
作者: 小夕    时间: 2013-10-26 07:12
定义作用域不完整,写java代码一定要注意作用域的范围完整。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2