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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 阿温 中级黑马   /  2014-8-4 09:39  /  1906 人查看  /  14 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. byte[] buf=new byte[1024];
  2.                 InputStream in=System.in;
  3.                 String s;
  4.                 int ch;
  5.                 int point=0;
  6.                
  7.                 while((ch=in.read())!=-1)
  8.                 {
  9.                         if(ch=='\r')continue;
  10.                         if(ch=='\n')
  11.                         {
  12.                                 while(point<1024)buf[point++]=0;
  13.                                 s=new String(buf);
  14.                                 if("over".equals(s))break;
  15.                                 System.out.println(s.toUpperCase());
  16.                                 point=0;
  17.                         }
  18.                         else
  19.                         {
  20.                                 buf[point]=(byte)ch;
  21.                                 point++;
  22.                         }
  23.                 }
复制代码

为毛"over".equals(s)那句不是true啊,总退不出去

14 个回复

倒序浏览
楼主写的和毕老师的不一样啊,逻辑判断不一样,你这个应该实现不了
回复 使用道具 举报
你定义buf缓冲区是1024字节的
所以输出以下s的长度发现
System.out.println(s.length());
s的长度为1024,over 和一个1024长度的over怎么会相等呢?

回复 使用道具 举报
用BufferedReader直接读一行不是更好吗
回复 使用道具 举报
以上三楼说的都有理
回复 使用道具 举报
2楼说的就是lz的病根
楼主的这种写法比较奇葩,今后实际开发可能不会出现这种写法的读取
另外,将 s=new String(buf);一句换成
s = new String(buf).split("0+")[0];
可以不安全的达到目的
回复 使用道具 举报
李彦来 发表于 2014-8-4 11:52
你定义buf缓冲区是1024字节的
所以输出以下s的长度发现
System.out.println(s.length());

但是我已经使用构造转化了呀,这应该没关系
回复 使用道具 举报
贾浩田 发表于 2014-8-4 11:23
楼主写的和毕老师的不一样啊,逻辑判断不一样,你这个应该实现不了

这个是毕老师的作业,使用数组完成,可以实现,但是就是不能退出
回复 使用道具 举报
zeus00456 发表于 2014-8-4 19:12
2楼说的就是lz的病根
楼主的这种写法比较奇葩,今后实际开发可能不会出现这种写法的读取
另外,将 s=new St ...

试了一下,还是不行啊,输入over输出OVER.................
回复 使用道具 举报
阿温 发表于 2014-8-4 21:57
但是我已经使用构造转化了呀,这应该没关系

我又细看了看,你的point没有起任何作用啊
你这样改一下
s=new String(buf,0,point);//需要把字符串赋给s后再进行重构
while(point<1024)
        buf[point++]=0;
if("over".equals(s))
        break;
回复 使用道具 举报
学习下1!!!
回复 使用道具 举报
刘高峰 发表于 2014-8-4 11:58
用BufferedReader直接读一行不是更好吗

我知道,这个是那节课的作业
回复 使用道具 举报
李彦来 发表于 2014-8-4 22:43
我又细看了看,你的point没有起任何作用啊
你这样改一下
s=new String(buf,0,point);//需要把字符串赋给s ...

谢谢,明白了,这么写的话while就不用了,谢谢
回复 使用道具 举报
你输入over 就退出了
回复 使用道具 举报
过来学习一下!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马