黑马程序员技术交流社区

标题: 毕老师视频IO流部分有一处代码不理解 [打印本页]

作者: zfan    时间: 2014-5-2 04:54
标题: 毕老师视频IO流部分有一处代码不理解
本帖最后由 zfan 于 2014-5-3 18:29 编辑

  1. <P>
  2. <P>
  3. <P>/*需求:
  4. <P>通过键盘录入数据.
  5. <P>当录入一行数据后,就将该数据进行打印;
  6. <P>如果录入的数据时over,那么停止录入;
  7. <P>*/
  8. <P>
  9. <P>import java.io.*;
  10. <P>
  11. <P>class ReadIn
  12. <P>{
  13. <P>  public static void main(String[] args) throws IOException{
  14. <P>    InputStream in = System.in;
  15. <P>    StringBuilder sb = new StringBuilder();
  16. <P>
  17. <P>    while(true)
  18. <P>    {
  19. <P>      int ch = in.read();
  20. <P>      if(ch=='\r')
  21. <P>                 continue;                         //continue语句的作用?
  22. <P>      if(ch=='\n')
  23. <P>       {
  24. <P>          String s = sb.toString();
  25. <P>          if("over".equals(s))
  26. <P>              break;
  27. <P>          System.out.println(s.toUpperCase());
  28. <P>          sb.delete(0,sb.length());
  29. <P>       }
  30. <P>       else
  31. <P>         sb.append((char)ch);
  32. <P>     }
  33. <P>   }
  34. <P>}
复制代码
此处加入一条continue语句的作用是什么?
这里设置if(ch=='\r')和if(ch=='\n')两条判断语句各有什么作用呢?
这一块不是很理解,有木有同学帮忙讲解一下!


作者: 孟凡超    时间: 2014-5-2 08:41
首先明确windows操作系统中“回车”对应的字符是“\r”和"\n"两个字符。
不能用char=="\r\n",后者放在一起就不是字符型了,而是字符串。所以要一个一个判断。
if(ch=='\r')和if(ch=='\n')两条判断语句不是各自都有作用,通过字符判断,只能这样写
然后就好解释continue的作用了:
if(ch=='\r')   continue;
若是字符"\r",则continue,不要存储,“继续”读下一条语句。
就是判断是否为"\n".
若是,就转换字符串,停止,最后输出显示。
不是,sb.append((char)ch);就添加

本人也是初学者,不一定说得正确,希望对你有帮助,若有错误,还望论坛牛人及时指点。

作者: peku    时间: 2014-5-2 08:49
你可以这样理解,因为whlie(true)对应是无限循环模式,需要内部语句结束循环,内部的代码默认会对每一个读到的字符存入缓冲区sb,但是因为每一行结尾有回车符,windows的回车符由\r\n两个字符构成,而linux系统回车符只有\n,而\r是不能存入缓冲区的,所以需要结束本次循环继续判断下一个字符;\n是为了判断一行结束,判断结构内对本行的字符串进行操作,并为下一行的录入作准备
作者: skill20    时间: 2014-5-2 09:51
  1. import java.io.*;
  2. class  InputTest1
  3. {
  4.         public static void main(String[] args) throws Exception
  5.         {
  6.                 input();
  7.         }
  8.         public static void input()throws Exception
  9.         {
  10.                 InputStream is = System.in;
  11.                 StringBuilder sb = new StringBuilder();
  12.                 while (true)
  13.                 {
  14.                         int num = is.read();
  15.                         if(num == '\r')
  16.                                 continue;  //未到一行结尾处,继续读取录入。
  17.                         if(num == '\n')//到结尾处就判断。
  18.                         {
  19.                                 String st = sb.toString();
  20.                                 if("over".equals(st))
  21.                                         break;
  22.                                 System.out.println(st.toUpperCase());
  23.                                 sb.delete(0,sb.length());//清空容器。
  24.                         }
  25.                         else
  26.                                 sb.append((char)num);
  27.                 }
  28.                 is.close();
  29.         }
  30. }
复制代码

作者: 小周务商    时间: 2014-5-2 10:43
判断回车换行的。




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