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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 我为你着迷 金牌黑马   /  2014-5-19 19:27  /  2215 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. import java.io.*;

  2. class ReadIn
  3. {
  4.                 public static void main(String[] args) throws IOException
  5.                 {
  6.                                 InputStream in=System.in;
  7.                           StringBuilder sb=new StringBuilder();
  8.                                
  9.                                 while(true)
  10.                                 {
  11.                                                 int ch=in.read();
  12.                                                 if(ch=='\r')
  13.                                                    continue;
  14.                                                 if(ch=='\n')
  15.                                                 {
  16.                                                                 String s=sb.toString();
  17.                                                                 if("over".equals(s))
  18.                                                                      break;
  19.                                                                 System.out.println(s.toUpperCase());
  20.                                                                 sb.delete(0,sb.length());
  21.                                                 }
  22.                                                 else
  23.                                                                 sb.append((char)ch);       
  24.                                                         
  25.                                 }
  26.                                  
  27.                 }
  28. }
复制代码
大家好,我有2个问题啊,麻烦帮忙解答一下疑惑,首先说声谢谢。
第一个问题就是这句话InputStream in=System.in;看起来很别扭,感觉怪怪的,所以有点蒙。
第二个问题就是这句话if("over".equals(s))是什么意思啊!

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

6 个回复

倒序浏览
第一个问题:System.in  的返回值类型是InputStream。
第二个问题:当键盘输入over时就让程序停下来,若没结束标记,read会一直等。

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

回复 使用道具 举报
1.输入流为键盘输入
2.要有结束标识
回复 使用道具 举报
InputStream in=System.in;//拿到键盘输入流
if("over".equals(s))//当输入over时候break循环结束,这里是倒着写的,因为这样可以排除s为null时抛出空指针异常
回复 使用道具 举报
第一个问题就是这句话InputStream in=System.in;看起来很别扭,感觉怪怪的,所以有点蒙。
System.in 是一个字段 相当与输出流  
static InputStream
          “标准”输入流。
第二个问题就是这句话if("over".equals(s))是什么意思啊!
就是 当键盘录入的是“over”就结束键盘录入
回复 使用道具 举报
本帖最后由 波涛 于 2014-5-19 20:53 编辑

1: 我们通过System.in得到的不是一个直接的InputStream对象,InputStream类本身为abstract的,你也不可能创建出这个类的一个对象来,实际上,我们通过System.in得到的是某一个InputStream的子类的对象,这就是java中多态的概念,即父类的变量可以引用子类的对象。查看一下java的源文件就可以知道这个in是通过native code得到的,所以你不用过分关心它到底是什么类型的,只要知道它就是一个InputStream类的子类的对象,我们可以通过它使用所有InputStream类的方法就可以了。
2:  String类有一个equals方法,用来判断该字串内容是否于其他字串相等;这里是说当接收得到的字符串是“over”时,然后。。。。。
回复 使用道具 举报
wyqs92 中级黑马 2014-5-19 21:58:33
7#
  1. import java.io.*;

  2. class ReadIn
  3. {
  4.                 public static void main(String[] args) throws IOException
  5.                 {
  6.                                 InputStream in=System.in;
  7.                           StringBuilder sb=new StringBuilder();
  8.                                 
  9.                                 while(true)
  10.                                 {
  11.                                                 int ch=in.read();
  12.                                                 if(ch=='\r')
  13.                                                    continue;
  14.                                                 if(ch=='\n')
  15.                                                 {
  16.                                                                 String s=sb.toString();
  17.                                                                 if("over".equals(s))//第二个问题:这里是判断你输入的字符串是否是over,如果是,就录入结束。   

  18.                                                                      break;
  19.                                                                 System.out.println(s.toUpperCase());
  20.                                                                 sb.delete(0,sb.length());
  21.                                                 }
  22.                                                 else
  23.                                                                 sb.append((char)ch);        
  24.                                                          
  25.                                 }
  26.                                  
  27.                 }
  28. }
复制代码

第一个问题:因为in 是标准输入流,它所对应的类型是inputstream,所以system.in表示的是获取键盘录入。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马