java中dis.readutf报错java.io.EOFException
样例一if((dis.readUTF())!=null){System.out.println(dis.readUTF());}样例二Stringmsg=null;if(...
样例一
if((dis.readUTF())!=null){
System.out.println(dis.readUTF());
}
样例二
String msg=null;
if((msg=dis.readUTF())!=null){
System.out.println(msg);
}
样例一会报出java.io.EOFException
而样例二则正常运行这是为什么? 展开
if((dis.readUTF())!=null){
System.out.println(dis.readUTF());
}
样例二
String msg=null;
if((msg=dis.readUTF())!=null){
System.out.println(msg);
}
样例一会报出java.io.EOFException
而样例二则正常运行这是为什么? 展开
3个回答
2017-12-13
展开全部
样例一出错的原因:在IF 中已经把dis该输出的值输出完了,光标已经移动了,然后在print中在调用的话他会另外再读取一次,但是已经没有数据让他读取了,所以会出错 例如:假设 dis.readUTF() 读到的值是“123”那么if执行之前光标在 1 前边,if执行之后光标跑到 3 后边了 再在print里边调用的时候光标已经不能再往后走了
样例二不出错是因为dis该输出的数据已经赋予给了msg,还是假设dis.readUTF()的值是“123”在if中读取完成后将“123”赋值给了msg这个变量 ,所以在print输出时输出的时msg这个变量的值,所以这种不会出错,这种错误提醒我们在编写代码时,如果有计算类的判断条件包括for while 等最好是使用运算结果来作为判断的条件,这样也可以节省内存和运算时间;
样例二不出错是因为dis该输出的数据已经赋予给了msg,还是假设dis.readUTF()的值是“123”在if中读取完成后将“123”赋值给了msg这个变量 ,所以在print输出时输出的时msg这个变量的值,所以这种不会出错,这种错误提醒我们在编写代码时,如果有计算类的判断条件包括for while 等最好是使用运算结果来作为判断的条件,这样也可以节省内存和运算时间;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
很简单,第一个样例中你总共读取了2次,奇数次只用来判断,偶数次只用来输出。所以这种写法是错误的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询