黑马程序员技术交流社区
标题:
毕老师视频IO流部分有一处代码不理解
[打印本页]
作者:
zfan
时间:
2014-5-2 04:54
标题:
毕老师视频IO流部分有一处代码不理解
本帖最后由 zfan 于 2014-5-3 18:29 编辑
<P>
<P>
<P>/*需求:
<P>通过键盘录入数据.
<P>当录入一行数据后,就将该数据进行打印;
<P>如果录入的数据时over,那么停止录入;
<P>*/
<P>
<P>import java.io.*;
<P>
<P>class ReadIn
<P>{
<P> public static void main(String[] args) throws IOException{
<P> InputStream in = System.in;
<P> StringBuilder sb = new StringBuilder();
<P>
<P> while(true)
<P> {
<P> int ch = in.read();
<P> if(ch=='\r')
<P> continue; //continue语句的作用?
<P> if(ch=='\n')
<P> {
<P> String s = sb.toString();
<P> if("over".equals(s))
<P> break;
<P> System.out.println(s.toUpperCase());
<P> sb.delete(0,sb.length());
<P> }
<P> else
<P> sb.append((char)ch);
<P> }
<P> }
<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
import java.io.*;
class InputTest1
{
public static void main(String[] args) throws Exception
{
input();
}
public static void input()throws Exception
{
InputStream is = System.in;
StringBuilder sb = new StringBuilder();
while (true)
{
int num = is.read();
if(num == '\r')
continue; //未到一行结尾处,继续读取录入。
if(num == '\n')//到结尾处就判断。
{
String st = sb.toString();
if("over".equals(st))
break;
System.out.println(st.toUpperCase());
sb.delete(0,sb.length());//清空容器。
}
else
sb.append((char)num);
}
is.close();
}
}
复制代码
作者:
小周务商
时间:
2014-5-2 10:43
判断回车换行的。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2