A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© RockLee 中级黑马   /  2015-6-23 20:20  /  395 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  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.         }
复制代码

6 个回复

倒序浏览
你的循环结束条件if("over".equals(sb.toString()))不成立,也就成了死循环
你这只有一条输出语句System.out.print(sb.toString().toUpperCase());还是在循环外的
回复 使用道具 举报
读取键盘录入,可用BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
或者用Scanner input=new Scanner(System.in),然后调用readLine()
回复 使用道具 举报
后面两条注释去掉,在sb= sb.append((char)ch);语句前加 else
回复 使用道具 举报
  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. }
复制代码
回复 使用道具 举报
VIP1108210117 发表于 2015-6-24 16:03
你的循环结束条件if("over".equals(sb.toString()))不成立,也就成了死循环
你这只有一条输出语句System.ou ...

为什么会变成死循环?
当读完了所有的字符ch不会变成-1么?
回复 使用道具 举报
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马