黑马程序员技术交流社区

标题: while条件里的初始化问题? [打印本页]

作者: 刘文飞    时间: 2012-11-3 18:46
标题: while条件里的初始化问题?
本帖最后由 刘文飞 于 2012-11-11 20:57 编辑
  1. import java.io.*;
  2. public class ByteArrayStream01{
  3.         public static void main(String args[]){
  4.                 String str = "Where is Hezi?";
  5.                 ByteArrayInputStream bis = new ByteArrayInputStream(str.getBytes());
  6.                 ByteArrayOutputStream bos = new ByteArrayOutputStream();
  7.                 //int temp = 0;
  8.                 while((int temp=bis.read())!=-1){
  9.                         char c = (char)temp;
  10.                         bos.write(Character.toLowerCase(c));
  11.                         
  12.                 }
  13.                 String str1 = bos.toString();
  14.                 try{
  15.                         bis.close();
  16.                         bos.close();
  17.                 }catch(IOException e){
  18.                         e.printStackTrace();
  19.                 }
  20.                 System.out.println(str1);
  21.         }
  22. }
复制代码
错误提示:
————————————————————————————
I:\code\java>javac ByteArrayStream01.java
ByteArrayStream01.java:8: ')' expected
                while((int temp=bis.read())!=-1){
                          ^
ByteArrayStream01.java:8: illegal start of expression
                while((int temp=bis.read())!=-1){
                                           ^
ByteArrayStream01.java:8: ';' expected
                while((int temp=bis.read())!=-1){
                                               ^
3 errors
————————————————————————
while括号中的条件不能直接定义初始化吗?

作者: 王晓州    时间: 2012-11-3 20:56
局部变量一定要初始化的
作者: 朱宏青    时间: 2012-11-3 21:08
既然是要判断bis.read()所返回的值 为什么不直接判断?还要去赋值?

while((int temp=bis.read())!=-1)  ---> whlie(bis.read()!=-1)

这样不行么?
作者: 王梁星    时间: 2012-11-3 21:21
for循环的初始化可以写在for(这里面),而while语句只能把初始化语句放在前面进行

我暂时是这么理解的
作者: 梁胜海    时间: 2012-11-3 22:47
public class Tes1t {
       
        public static void main(String args[]){
         
                        String str = "Where is Hezi?";
         
                        ByteArrayInputStream bis = new ByteArrayInputStream(str.getBytes());
         
                        ByteArrayOutputStream bos = new ByteArrayOutputStream();
         
                        int temp = 0;//初始化局部变量
                                        while((temp=bis.read())!=-1){
                                char c = (char)temp;
                                bos.write(Character.toLowerCase(c));
                        }
         
                        String str1 = bos.toString();
                        try{
                                bis.close();
         
                                bos.close();
         
                        }catch(IOException e){
                                e.printStackTrace();
                        }
                        System.out.println(str1);
                }
}
未初始化局部变量,还有temp声明了初始化后,下面temp不能在声明int,因为已经声明过了。你再运行我代码试试,就正确了
作者: 刘文飞    时间: 2012-11-4 10:23
qwepoidjdj 发表于 2012-11-3 21:08
既然是要判断bis.read()所返回的值 为什么不直接判断?还要去赋值?

while((int temp=bis.read())!=-1)  --- ...

作为一个中间变量,用作后面的从内存中输出
作者: 刘文飞    时间: 2012-11-4 10:24
werewolf 发表于 2012-11-3 20:56
局部变量一定要初始化的

int temp=bis.read()
这样也是初始化吧
作者: 刘文飞    时间: 2012-11-4 10:26
似水流年 发表于 2012-11-3 22:47
public class Tes1t {
       
        public static void main(String args[]){

//int temp = 0;
这句是给注释掉了,不在里面,
只是奇怪为什么while((int temp=bis.read())!=-1) 不能在while里进行声明然后初始化
作者: 朱宏青    时间: 2012-11-4 12:12
刘文飞 发表于 2012-11-4 10:23
作为一个中间变量,用作后面的从内存中输出

那么就该单独拿出来声明,首先你要明白,一个int没有初始化,他的值不一定是null,也不一定是int,处于"薛定谔的猫"状态,程序无法确认他的结果,必然出错.
作者: 马纵驰    时间: 2012-11-4 13:30
while中的判断语句中不允许使用变量初始化,这是规矩
作者: 王梁星    时间: 2012-11-5 14:14
刘文飞 发表于 2012-11-4 10:26
//int temp = 0;
这句是给注释掉了,不在里面,
只是奇怪为什么while((int temp=bis.read())!=-1) 不能在 ...

我也奇怪了,总之这样会产生语法错误。估计是java规范里给虚拟机规定的规则。不按照规则行事的就是错阿
作者: 刘文飞    时间: 2012-11-9 18:13
78776158 发表于 2012-11-4 13:30
while中的判断语句中不允许使用变量初始化,这是规矩

只能这么理解了。




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