A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘文飞 中级黑马   /  2012-11-3 18:46  /  4029 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 刘文飞 于 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括号中的条件不能直接定义初始化吗?

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

11 个回复

倒序浏览
局部变量一定要初始化的

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报
既然是要判断bis.read()所返回的值 为什么不直接判断?还要去赋值?

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

这样不行么?

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报
for循环的初始化可以写在for(这里面),而while语句只能把初始化语句放在前面进行

我暂时是这么理解的

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报
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,因为已经声明过了。你再运行我代码试试,就正确了

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报
qwepoidjdj 发表于 2012-11-3 21:08
既然是要判断bis.read()所返回的值 为什么不直接判断?还要去赋值?

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

作为一个中间变量,用作后面的从内存中输出
回复 使用道具 举报
werewolf 发表于 2012-11-3 20:56
局部变量一定要初始化的

int temp=bis.read()
这样也是初始化吧
回复 使用道具 举报
似水流年 发表于 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 10:23
作为一个中间变量,用作后面的从内存中输出

那么就该单独拿出来声明,首先你要明白,一个int没有初始化,他的值不一定是null,也不一定是int,处于"薛定谔的猫"状态,程序无法确认他的结果,必然出错.
回复 使用道具 举报
while中的判断语句中不允许使用变量初始化,这是规矩

点评

我也这么理解  发表于 2012-11-5 14:15
回复 使用道具 举报
刘文飞 发表于 2012-11-4 10:26
//int temp = 0;
这句是给注释掉了,不在里面,
只是奇怪为什么while((int temp=bis.read())!=-1) 不能在 ...

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

只能这么理解了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马