黑马程序员技术交流社区

标题: 请教我的程序为什么不能终止? [打印本页]

作者: 王晓楠    时间: 2013-1-26 16:32
标题: 请教我的程序为什么不能终止?

  1. public class InputstreamReadrDemo {

  2.         public static void main(String[] args) throws IOException {               
  3.                 InputStreamReader isr = new InputStreamReader(System.in);
  4.                 int x;
  5.                 while((x=isr.read())!=-1){
  6.                         System.out.print(x);
  7.                 }
  8.                 isr.close();
  9.                 }
  10. }
复制代码

作者: 黄锦成    时间: 2013-1-26 16:45
你这个程序是接收键盘输入,程序不知道你什么时候结束输入!以前我们在读取文件时,用这个程序,可以结束,那是因为操作系统为我们设定了一个结束标记。现在键盘输入要我们自己设定一个结束标记
作者: 王晓楠    时间: 2013-1-26 17:11
黄锦成 发表于 2013-1-26 16:45
你这个程序是接收键盘输入,程序不知道你什么时候结束输入!以前我们在读取文件时,用这个程序,可以结束, ...

为什么还要读取输入,输入不就是在第5行输入一次吗,
作者: 黄锦成    时间: 2013-1-26 17:21
王晓楠 发表于 2013-1-26 17:11
为什么还要读取输入,输入不就是在第5行输入一次吗,

你使用了while循环啊,读取了一次,还会循环下去的
作者: 朱玉玺    时间: 2013-1-26 18:29
read()是阻塞式方法,读取流是System.in时,如果键盘没有录入,while循环中read会一直阻塞等待,这时需要定义结束标记,以告诉read方法,读取完了。如果把System.in换成一个硬盘上的文件,因为文件自己有结束标记,当read()方法读到结束标记时,会返回-1,跳出while循环。
作者: 郭嘉    时间: 2013-1-26 19:12
楼主这个程序初衷应该是希望键盘输入一个字符,然后判断是否为-1,如果不是则把这个数字打印出来,如果是则停止程序,但是楼主用的InputStream中的read方法是返回这个对象的下一个数据字节,而不是读取你键盘输入的字符
所以改了下
  1. import java.io.*;
  2. public class InputstreamReadrDemo {

  3.         public static void main(String[] args) throws IOException {               
  4.                 BufferedReader br = new BufferedReader(new InputStreamReader(System.in));  //调用BufferedReader类
  5.                // String am=br.getEncoding();
  6.                String x=null;
  7.                 while((x=br.readLine()).compareTo("Stop")!=0){                            //readline方法是返回键盘输入的字符串,判断是否输入stop字符串,如果是,则退出
  8.                
  9.                         System.out.println(x);
  10.                 }
  11.                 br.close();
  12.                 }
  13. }
复制代码
仅是猜测下楼主的具体意思,如果有误,无视本楼就好
作者: 王晓楠    时间: 2013-1-27 11:50
知道了,谢谢各位啊!




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