黑马程序员技术交流社区

标题: 为什么这样写就错误??? [打印本页]

作者: 覃勇    时间: 2013-7-1 19:32
标题: 为什么这样写就错误???
正确代码:
  1. import java.io.*;
  2. class FileReaderTest
  3. {
  4.         public static void main(String[] args) throws Exception
  5.         {
  6.                 FileReader fr = new FileReader("Test.txt");
  7.                 char[] arr = new char[4];
  8.                 int len = 0;
  9.                 while((len = fr.read(arr))!=-1)
  10.                 {
  11.                         System.out.println(new String(arr,0,len));
  12.                 }
  13.         }
  14. }
复制代码
错误代码:
  1. import java.io.*;
  2. class FileReaderTest
  3. {
  4.         public static void main(String[] args) throws Exception
  5.         {
  6.                 FileReader fr = new FileReader("Test.txt");
  7.                 char[] arr = new char[4];
  8.                 while((int len = fr.read(arr))!=-1)
  9.                 {
  10.                         System.out.println(new String(arr,0,len));
  11.                 }
  12.         }
  13. }
复制代码
问题:为什么我在while内部为len赋值就会出错???
作者: liujkh123    时间: 2013-7-2 08:46
竟然连着俩人发一样的问题
请参考http://bbs.itheima.com/thread-58677-1-1.html
作者: 张昶    时间: 2013-7-2 09:38
应该是全局变量和局部变量的问题吧!第一个是,在整个main函数中有效,而第二个则是在while中有效。
作者: longlangcx    时间: 2013-7-2 10:04
本帖最后由 longlangcx 于 2013-7-2 10:06 编辑

LZ没有搞清楚赋值表达式和赋值语句的区别。

while(boolean-expression){
    statements
}

其中括号里的部分需要一个值为布尔型的内容,可以是布尔型直接常量:true/ false,可以是一个布尔变量,可以是一个返回boolean值的方法调用,还可以是值为布尔型的关系表达式或逻辑表达式,或者布尔型的赋值表达式。

len = fr.read(arr))!=-1,这个属于是赋值表达式,赋值表达式的值就是赋值的内容本身,即 fr.read(arr))!=-1部分,这是一个关系表达式,值为布尔型,所以可以放在while里。
int len = fr.read(arr))!=-1,声明+初始化,这个就不是赋值表达式了,属于赋值语句而不是赋值表达式,本身是没有值的,所以自然不行。

作者: lanbuohan    时间: 2013-7-2 16:14
while中式判断True、和false的这么写就可能存在错误




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