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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马华 中级黑马   /  2013-5-2 08:45  /  1525 人查看  /  5 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 黑马华 于 2013-5-3 22:51 编辑

     接收键盘录入的方式都有哪些?以及这些方式的优劣。尽量详细点。thanks

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

5 个回复

倒序浏览
有两个常用的类BufferedReader和Scanner
1、BufferedReader br= new BufferedReader(new InputStreamReader(System.in));br.readline();//读取一个文本行。
优点:可以一次性的将全部内容读取出来,完成键盘的输入功能。
缺点:要处理IO异常;读取过程理解起来有点点复杂;读取内容后不能直接实例化对象等等。

2、Scanner s =new Scanner(System.in);
拥有next.Byte(),nextDouble(),nextFloat,nextInt(),nextLine(),nextLong(),nextShot()等方法接收不同类型。
优点:用Scanner获得用户的输入非常的方便,Scanner取得输入的依据是空格符,包括空格键,Tab键和Enter键.当按下这其中的任一键时,Scanner就会返回下一个输入。
缺点:在命令行模式下要输入数据至程序中时,我们可以使用标准输入串对象System.in.但是,我们并不经常直接使用它,因为System.in提供的 read方法每次只能读取一个字节的数据,而我们平时所应用的通常是读取一个字符串或者是一个数字。

评分

参与人数 1技术分 +1 收起 理由
张熙韬 + 1

查看全部评分

回复 使用道具 举报
 程序开发过程中,需要从键盘获取输入值是常有的事,但Java它偏偏就没有像c语言给我们提供的scanf(),C++给我们提供的cin()获取键盘输入值的现成函数!Java没有提供这样的函数也不代表遇到这种情况我们就束手无策,请你看以下三种解决方法吧:

  以下将列出几种方法:

  方法一:从控制台接收一个字符,然后将其打印出来

  public static void main(String [] args) throws IOException{

  System.out.print(“Enter a Char:”);

  char i = (char) System.in.read();

  System.out.println(“your char is :”+i);

  }

  }

  虽然此方式实现了从键盘获取输入的字符,但是System.out.read()只能针对一个字符的获取,同时,获取进来的变量的类型只能是char,当我们输入一个数字,希望得到的也是一个整型变量的时候,我们还得修改其中的变量类型,这样就显得比较麻烦。

  方法二:从控制台接收一个字符串,然后将其打印出来。在这个题目中,我们需要用到BufferedReader类和InputStreamReader类

  public static void main(String [] args) throws IOException{

  BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

  String str = null;

  System.out.println(“Enter your value:”);

  str = br.readLine();

  System.out.println(“your value is :”+str);

  }

  这样我们就能获取我们输入的字符串。

  方法三:这种方法我认为是最简单,最强大的,就是用Scanner类

  public static void main(String [] args) {

  Scanner sc = new Scanner(System.in);

  System.out.println(“请输入你的姓名:”);

  String name = sc.nextLine();

  System.out.println(“请输入你的年龄:”);

  int age = sc.nextInt();

  System.out.println(“请输入你的工资:”);

  float salary = sc.nextFloat();

  System.out.println(“你的信息如下:”);

  System.out.println(“姓名:”+name+“\n”+“年龄:”+age+“\n”+“工资:”+salary);

  }

  这段代码已经表明,Scanner类不管是对于字符串还是整型数据或者float类型的变量,只需做一点小小的改变,就能够实现功能!无疑他是最强大的!
这是最常用的三种,当然还有其他的,如对话框等等

评分

参与人数 1技术分 +1 收起 理由
张熙韬 + 1

查看全部评分

回复 使用道具 举报
import java.io.*;

public class PrintDemo
{
        public static void main(String [] args) throws IOException
        {
                method_1();
                //method_2();
        }
       

        //方法一用PrintWriter流实现输出功能;
        public static void method_1() throws IOException
        {
                BufferedReader br = new BufferedRerader(new FileReader(System.in));        //从键盘输入;
                PrintWriter pw = new PrintWriter(new FileWriter(System.out), true);        //加上true参数后,自带刷新缓冲区功能,不需要在下面调用flush方法;

                String line = null;

                while((line = br.readLine()) != null)
                {
                        if("over".equals(line))                //over为输入结束标志,遇到over,输入结束,跳出循环;
                                break;
       
                        pw.println(line.toUppercase());                //转换为大写后输出,println自带换行功能;
                }

                br.close();
                pw.close();
        }


        //方法二用BufferedWriter流实现;
        public static void method_2() throws IOException
        {
                BufferedReader br = new BufferedRerader(new FileReader(System.in));
                BufferedWriter bw = new BufferedWriter(new FileWriter(System.out));

                String line = null;

                while((line = br.readLine()) != null)
                {
                        if("over".equals(line))
                                break;
       
                        bw.write(line.toUppercase());                //转换为大写后输出,不带换行功能;
                        bw.newLine();                //增加换行符,换行;
                        bw.flush();                //刷新缓冲区;
                }

                br.close();
                bw.close();
        }
}

实际使用中,方法一用的比方法二要多;

评分

参与人数 1技术分 +1 收起 理由
张熙韬 + 1

查看全部评分

回复 使用道具 举报
如果仍有问题,请继续追问,如果问题已解决,请将分类改为已解决,谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马