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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杜佳瑞 中级黑马   /  2012-8-7 23:54  /  1911 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杜佳瑞 于 2012-8-7 23:57 编辑

import java.io.*;
class TransStreamDemo
{
        public static void main(String[] args) throws Exception
        {
                InputStream in=System.in; //1,我知道是获得键盘录入对象,一个输入流,但是总感觉这里很抽象,不容易接受。
                InputStreamReader isr=new InputStreamReader(in);
                BufferedReader bufr=new BufferedReader(isr);
                String line=null;
                while((line=bufr.readLine())!=null)//2,我输入文本后,每次读取一行,然后以大写形式打印出来,假如我输了3行,循环会执行3次,那结果是不是小写和大写交替出现呢,可是答案是先打完小写再打印大写?               
                               {
                        if("over".equals(line))
                                break;//3,break跳出循环体,这里怎么实现的停止录入呢?这里老师没有讲,想不通
                        System.out.println(line.toUpperCase());
                }
                bufr.close();
               
        }
}
就这样一个简单的小程序好多不理解的地方,上面有3处,主要是对输入到输出这个具体过程是怎样实现的,希望有明白的帮我解答一下,最好有图解
还有个很奇怪的问题如果我复制粘贴比较多的文本时,不用我回车,dos里会自动打印出大写了,大家可以试试。

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1 赞一个!

查看全部评分

5 个回复

正序浏览
张雪磊 发表于 2012-8-8 08:52
import java.io.*;
class TransStreamDemo
{

谢谢你,我还有个问题就是为什么复制大篇幅的时候,dos里面不用我敲回车,自动显示大写呢
回复 使用道具 举报
import java.io.*;
class TransStreamDemo
{
        public static void main(String[] args) throws Exception
        {
                InputStream in=System.in; //1,流就相当于流水线上的传送带,System in就相当于生产产品的源头
                InputStreamReader isr=new InputStreamReader(in);
                BufferedReader bufr=new BufferedReader(isr);
                String line=null;
                while((line=bufr.readLine())!=null)//2,readLine()是一次读一行,在你键盘录入的时候,按下回车键,就已经读完又打印了,所以你肯定不会连着输入三行的               
                               {
                        if("over".equals(line))
                                break;//3,当你键盘输入的是over时,break跳出
                        System.out.println(line.toUpperCase());
                }
                bufr.close();
               
        }
}
回复 使用道具 举报
import java.io.*;
class TransStreamDemo
{
        public static void main(String[] args) throws Exception
        {
                InputStream in=System.in; //1,我知道是获得键盘录入对象,一个输入流,但是总感觉这里很抽象,不容易接受。
                                                          //in是System类的一个静态字段,是标准输入流,就是键盘输入,没必要往深了想,记住就行了
                                                                 
                InputStreamReader isr=new InputStreamReader(in);
                BufferedReader bufr=new BufferedReader(isr);
                String line=null;
                while((line=bufr.readLine())!=null)//2,我输入文本后,每次读取一行,然后以大写形式打印出来,假如我输了3行,循环会执行3次,那结果是不是小写和大写交替出现呢,可是答案是先打完小写再打印大写?               
                                       /*     当执行到上面键盘录入时,输入完毕后你按下回车程序就会往下执行,这时候你输入的就是一行,然后执行循环语句里的代码
                                               把小写转换成大写打印,再回来循环时你需要在打印一行按下回车循环里的代码又这行了,所以肯定是打完小写然后大写被打印
                                               出来,不会出现你输入三行在打印的情况,因为你输入一行按回车后,就会变成大写打印了。
                                       */

                               {
                        if("over".equals(line))
                                break;//3,break跳出循环体,这里怎么实现的停止录入呢?这里老师没有讲,想不通
                                          //这个当break跳出循环后,就会执行下面的bufr.close();把输入流关掉了,自然录入就停止了
                        System.out.println(line.toUpperCase());
                }
                bufr.close();
               
        }
}

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1 赞一个!

查看全部评分

回复 使用道具 举报
  1. import java.io.*;
  2. class TransStreamDemo
  3. {
  4.         public static void main(String[] args) throws Exception
  5.         {        
  6.                         //提供一个输入字节的方法 给InputStream的子类对象
  7.                 InputStream in=System.in; //System类中的属性in
  8.                                              //是一个标准的输入流此流对应于键盘输入

  9.                 InputStreamReader isr=new InputStreamReader(in);//定义一个字节到字符的转换流
  10.                 BufferedReader bufr=new BufferedReader(isr);// 建立一个字符流的缓冲区
  11.                 String line=null;
  12.                 while((line=bufr.readLine())!=null)//缓冲区中的readLine()方法 直接读取一行数据  当读到“\n”,"\r"或者回车时
  13.                                                                     //则表示该行终止
  14.                                {
  15.                         if("over".equals(line))
  16.                                 break;//3,break循环结束  跳出while循环  代码继续向下执行
  17.                         System.out.println(line.toUpperCase());//将读取到的数据大写并打印到控制台上
  18.                 }
  19.                 bufr.close();//此方法关闭此流并释放与之关联的所有资源  
  20.                
  21.         }
  22. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1 赞一个!

查看全部评分

回复 使用道具 举报
希望能帮到你,不明白的地方  你再问 我在给你讲讲   得睡觉了  明天还得上课   又是奋斗的一晚,  不管进了黑马的  还没进黑马的 只要还在黑马  我们就是黑马人   黑马加油!黑马加油!各位晚安!

KXZ9OAVS)I3%S){14HJY7KT.jpg (111.73 KB, 下载次数: 9)

KXZ9OAVS)I3%S){14HJY7KT.jpg

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马