黑马程序员技术交流社区

标题: 为什么没有输出不了? [打印本页]

作者: RockLee    时间: 2015-6-23 20:20
标题: 为什么没有输出不了?
  1. import java.io.IOException;
  2. import java.io.InputStream;

  3.   /*
  4.                  * 获取用户键盘录入的数据,
  5.                  * 并将数据变成大写显示在控制台上,
  6.                  * 如果用户输入的是over,结束键盘录入。
  7.                  *
  8.                  *
  9.                  * 思路:因为键盘录入的数据只能是一个一个读取,所以我们选择循环。但是循环的话注意不要把换行符加入进去。
  10.                  * 置于用户输入的是over,我们用获得的字符串去匹配Over如果返回为true,则结束录入,否则变成大写输出。
  11. */

  12. public class Test1 {
  13.         public static void main(String[] args) throws IOException {
  14.                 InputStream in = System.in;
  15.                 StringBuilder sb = new StringBuilder();
  16.                 int ch = 0;
  17.                 while((ch = in.read())!= -1){
  18.                         //System.out.print((char)ch);
  19.                         if(ch == '\r')  continue;
  20.                         if (ch == '\n') {
  21.                                 if("over".equals(sb.toString())){
  22.                                         break;
  23.                                 }
  24.                                 //System.out.print(sb.toString().toUpperCase());
  25.                                 //sb.delete(0, sb.length());
  26.                         }
  27.                         sb= sb.append((char)ch);       
  28.                 }
  29.                 System.out.print(sb.toString().toUpperCase());
  30.                 }
  31.         }
复制代码

作者: VIP1108210117    时间: 2015-6-24 16:03
你的循环结束条件if("over".equals(sb.toString()))不成立,也就成了死循环
你这只有一条输出语句System.out.print(sb.toString().toUpperCase());还是在循环外的
作者: VIP1108210117    时间: 2015-6-24 16:05
读取键盘录入,可用BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
或者用Scanner input=new Scanner(System.in),然后调用readLine()
作者: VIP1108210117    时间: 2015-6-24 16:11
后面两条注释去掉,在sb= sb.append((char)ch);语句前加 else
作者: world.net    时间: 2015-6-24 16:21
  1. class Test{
  2.         public static void main(String[]args)throws Exception{
  3.                 BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in));
  4.                 BufferedWriter bufw=new BufferedWriter(new OutputStreamWriter(System.out));
  5.                 String line=null;
  6.                 while((line=bufr.readLine())!=null){
  7.                         if(line.equals("over"))
  8.                                 break;
  9.                         bufw.write(line.toUpperCase());
  10.                         bufw.newLine();
  11.                         bufw.flush();
  12.                 }
  13.                 bufr.close();
  14.                 bufw.close();
  15.         }
  16. }
复制代码

作者: RockLee    时间: 2015-6-24 22:26
VIP1108210117 发表于 2015-6-24 16:03
你的循环结束条件if("over".equals(sb.toString()))不成立,也就成了死循环
你这只有一条输出语句System.ou ...

为什么会变成死循环?
当读完了所有的字符ch不会变成-1么?
作者: RockLee    时间: 2015-6-24 22:28
world.net 发表于 2015-6-24 16:21

谢谢,:):):):)




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