2 zpc10cs zpc10cs 于 2015.07.03 16:56 提问

关于for循环问题,加不加括号有什么区别
   DataOutputStream dos=new DataOutputStream(new FileOutputStream("D:/zpc.txt"));
          int a[]={1,3,4,62,13,35};
        for (int i = 0; i < a.length; i++) 

                dos.writeInt(a[i]);
                dos.close();                   

}
这样就没问题,但是如果
for (int i = 0; i < a.length; i++)
{
dos.writeInt(a[i]);
dos.close();

}

这样加了括号就有问题了,报写入错误,是为什么呢

8个回答

danielinbiti
danielinbiti   Ds   Rxr 2015.07.03 17:01
已采纳
 for (int i = 0; i < a.length; i++) 
                dos.writeInt(a[i]);//不加括号,for循环只包含这句
                dos.close();     //加了括号,这句也在for循环内了,close后再循环writeInt就报错了。
u011626619
u011626619 for循环范围是其后面最近的分号处
2 年多之前 回复
danielinbiti
danielinbiti 第一次循环,dos就被关闭了,第二次循环的时候,dos再流输出就报错了,因为已经close了
2 年多之前 回复
knight1840
knight1840   2015.07.03 22:59

不加大括号,默认循环条件下一行为循环体。
如加上括号,整个括号都是循环体,加了括号后你在第一次循环的时候已经 dos.close();第二次执行循环体写文件当然报错了~~~

A18380469654
A18380469654   2015.07.03 17:03

close()写在for循环外面

strutce
strutce   Ds   Rxr 2015.07.03 17:03

加了{}整当成一个整体为for的执行语句块,所以当你执行for循环i=0是就close了所以出错,不加{}时for后面的第一句话当成for的执行语句块

zpc10cs
zpc10cs   2015.07.03 17:04

那没括号怎么知道循环到哪里结束呢

zpc10cs
zpc10cs   2015.07.03 17:04

那没括号怎么知道循环到哪里结束呢

miracle_yao
miracle_yao   2015.07.03 17:18

加括号版本:

 DataOutputStream dos=new DataOutputStream(new FileOutputStream("D:/zpc.txt"));
 int a[]={1,3,4,62,13,35};
 for (int i = 0; i < a.length; i++) {

                dos.writeInt(a[i]);
                dos.close();   
}

第一次循环就把文件关了,你再读肯定出错。
不加括号相当于下面的版本:

 DataOutputStream dos=new DataOutputStream(new FileOutputStream("D:/zpc.txt"));
 int a[]={1,3,4,62,13,35};
 for (int i = 0; i < a.length; i++) {

                dos.writeInt(a[i]);
}
 dos.close();   

即文件操作完再关闭且不再对已关闭的文件进行操作,这样就不会出错。

yuke198907
yuke198907   2015.07.03 17:43

文件操作完之后再关闭流

Csdn user default icon
上传中...
上传图片
插入图片