黑马程序员技术交流社区

标题: 转换流的问题 [打印本页]

作者: papercup    时间: 2014-4-3 01:03
标题: 转换流的问题
本帖最后由 papercup 于 2014-4-3 01:11 编辑

看视频自己写了代码发现个问题:为什么只能输入一个字符串啊?怎么解决呢?
  1. import java.io.*;

  2. public class TransDemo {
  3.         public static void main(String[] args) throws IOException{
  4.                 InputStream in = System.in;
  5.                 InputStreamReader isr = new InputStreamReader(in);
  6.                 BufferedReader buf = new BufferedReader(isr);
  7.                 String ch = null;
  8.                 while(true){
  9.                         if( (ch = buf.readLine()) != null && !("over".equals(ch)) ){
  10.                                 System.out.println(ch.hashCode());
  11.                         }
  12.                         break;
  13.                 }
  14.                 buf.close();
  15.                 isr.close();
  16.                 in.close();
  17.         }
  18. }
复制代码


作者: papercup    时间: 2014-4-3 01:11
怎么回事,我改了下注释怎么什么都不显示了啊。。。
作者: 月影释    时间: 2014-4-3 01:19
你的输入源是控制台  输出源是哪里?
作者: Engle    时间: 2014-4-3 08:22
我不知道你 是怎么理解你写的代码的,我给你加了简单的注释:
public static void main(String[] args) throws IOException{
        InputStream in = System.in;//从控制台获取数据输入流
        InputStreamReader isr = new InputStreamReader(in);//使用字符输入流
        BufferedReader buf = new BufferedReader(isr);//使用缓冲字符输入流
        String ch = null;
      //如果该行能读到内容并且内容不为"over",就打印该内容的哈希值
        while(true){
                if( (ch = buf.readLine()) != null && !("over".equals(ch)) ){
                        System.out.println(ch.hashCode());
                }
                break;
        }
        buf.close();
        isr.close();
        in.close();
}
作者: osully    时间: 2014-4-3 08:45
加个else吧

  1. public class TransDemo {
  2.         public static void main(String[] args) throws IOException {
  3.                 InputStream in = System.in;
  4.                 InputStreamReader isr = new InputStreamReader(in);
  5.                 BufferedReader buf = new BufferedReader(isr);
  6.                 String ch = null;
  7.                 while (true) {
  8.                         if ((ch = buf.readLine()) != null && !("over".equals(ch))) {
  9.                                 System.out.println(ch.hashCode());
  10.                         }else
  11.                                 break;
  12.                 }
  13.                 buf.close();
  14.                 isr.close();
  15.                 in.close();
  16.         }
  17. }
复制代码

作者: papercup    时间: 2014-4-3 09:18
osully 发表于 2014-4-3 08:45
加个else吧

谢谢,解决了
作者: papercup    时间: 2014-4-3 09:20
Engle 发表于 2014-4-3 08:22
我不知道你 是怎么理解你写的代码的,我给你加了简单的注释:
public static void main(String[] args) thr ...

我发帖后重新编辑了下,在代码块加了注释结果代码又显示不出来了。。已经解决了,谢谢你了
作者: lazy_xia    时间: 2014-4-3 09:29
将break 去掉 你这样子做就执行了一次就跳出去了 去掉就可以一直循环下去了
作者: papercup    时间: 2014-4-3 09:35
lazy_xia 发表于 2014-4-3 09:29
将break 去掉 你这样子做就执行了一次就跳出去了 去掉就可以一直循环下去了 ...

去掉的话,over就结束不了了
作者: lazy_xia    时间: 2014-4-3 09:40
papercup 发表于 2014-4-3 09:35
去掉的话,over就结束不了了

那就加判断 你if里的条件分开来写 不过这样子还不如上面的加else 好使
作者: ╰青青子佩ˊゝ    时间: 2014-4-3 09:48
break不能去掉,去掉了编译不能通过,但是你可以加else,看下面代码。
  1. import java.io.*;
  2. public class TransDemo {
  3.         public static void main(String[] args) throws IOException{
  4.                 InputStream in = System.in;
  5.                 InputStreamReader isr = new InputStreamReader(in);
  6.                 BufferedReader buf = new BufferedReader(isr);
  7.                 String ch = null;
  8.                  while(true){
  9.                         if( (ch = buf.readLine()) != null && !("over".equals(ch)) ){
  10.                                 System.out.println(ch.hashCode());
  11.                         }
  12.                         //在这里要加一个else,像你的代码的话,不论if里面代码有没有执行,都得执行break语句,所以输入了一行字符后,就退出了循环。
  13.                         else{
  14.                                 break;
  15.                         }
  16.                 }
  17.                 buf.close();
  18.                 isr.close();
  19.                 in.close();
  20.         }
  21. }
复制代码

作者: H-Deka    时间: 2014-4-3 10:00

第5行中的break;去掉就可以循环输入了!输入over时就结束了





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