黑马程序员技术交流社区

标题: 关于键盘录入的问题 [打印本页]

作者: 我为你着迷    时间: 2014-5-19 19:27
标题: 关于键盘录入的问题
  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))是什么意思啊!


作者: skill20    时间: 2014-5-19 19:44
第一个问题:System.in  的返回值类型是InputStream。
第二个问题:当键盘输入over时就让程序停下来,若没结束标记,read会一直等。
作者: SyouRai_Tsk    时间: 2014-5-19 19:45
1.输入流为键盘输入
2.要有结束标识
作者: 周俊波    时间: 2014-5-19 19:58
InputStream in=System.in;//拿到键盘输入流
if("over".equals(s))//当输入over时候break循环结束,这里是倒着写的,因为这样可以排除s为null时抛出空指针异常
作者: 不似侽紸角.    时间: 2014-5-19 20:32
第一个问题就是这句话InputStream in=System.in;看起来很别扭,感觉怪怪的,所以有点蒙。
System.in 是一个字段 相当与输出流  
static InputStream
          “标准”输入流。
第二个问题就是这句话if("over".equals(s))是什么意思啊!
就是 当键盘录入的是“over”就结束键盘录入
作者: 波涛    时间: 2014-5-19 20:51
本帖最后由 波涛 于 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
  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表示的是获取键盘录入。




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