1. 引言

高校中很多学校开设了Java语言程序设计课程,这是一门实践性很强的语言,在程序设计中经常需要从键盘随机输入所需要的数据,Java语言中的键盘输入数据没有像C语言给我们提供的scanf(),C++给我们提供的cin()获取键盘输入值的现成函数那样简洁,但我们也不用担心,可以通过以下几个类和方法接收键盘输入的数据。

2. 方法介绍

下面就分别将Java语言中键盘输入数据的几种类和方法举例来说明,然后对其进行分析。

方法一:使用System.in.read()方法。

System.in返回的是InputStream指向命令行输入的字节流 [1] ,它的read方法以字节流的方式来读取命令行的输入的数据。

例题1:从键盘输入一个字符,然后打印出信息。

代码如下:

import java.io.IOException;

class shuru1 {

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

{

System.out.print (你喜欢Java吗(Y/N) );

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

if (like =='Y'|| like == 'y')

System.out.println(Good);

}

}

运行结果如下:

你喜欢Java吗(Y/N)y

Good

分析:这种方式实现了从键盘获取输入的字符,但是System.in.read()只能接收一个字符,也就是如果在输入数据的过程中输入了多个字符,那么like变量中只会接收第一个字符。而且,获取的数据的类型只能是char类型,如果我们想输入一个数字,希望得到的也是一个整型变量的时候,我们就需要对其接收到的数据进行类型的转换。

例题2:从键盘输入一个成绩,判断是否及格。

代码如下:

import java.io.IOException;

public class shuru2 {

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

System.out.println(请输入你的成绩: );

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

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

int score = (a-'0')*10+b-'0'; //将字符类型的数字转换成整型的完整的成绩

if (score >= 60)

System.out.println(你及格了);

else

System.out.println(你没及格!);

}

}

分析:

1) 由于System.in.read()只能从键盘输入一个数字存到一个变量中,并且该数字是char类型的,想接收第二个数字就需要存到第二个变量中,但实际运行过程中有的时候是输入一位数字成绩信息,有的时候是两位,有的时候是三位,因此此程序代码就很难满足这些各种可能性,此代码只能对接收两位的数字起作用,因此System.in.read()方法来达到键盘输入数据并不灵活。

2) System.in.read()由于接收的是char类型的数据,但成绩应该是整型或是float或double类型才能判断及格还是不及格,这就需要进行类型转换。

由此可以得出结论,如果想从键盘输入的数据是一位字符并且是char类型的话可以使用System.in.read()方法;如果想输入的数据是多于一个字符的话,并且需要输入的数据是其他类型的话,该System.in.read()的方法不合适。

方法二:使用StringBuffer类、append()方法 [2] 。

StringBuffer类和String一样,也用来代表字符串,只是由于StringBuffer的内部实现方式和String不同,所以StringBuffer在进行字符串处理时,不生成新的对象,在内存使用上要优于String类。所以在实际使用时,如果经常需要对一个字符串进行修改,例如插入、删除等操作,使用StringBuffer要更加适合一些。

append()方法的作用是追加内容到当前StringBuffer对象的末尾,类似于字符串的连接。

例题3:从键盘输入一个字符串,当输入回车符时停止输入,打印出输入的字符串。

代码如下:

import java.io.IOException;

class shuru3 {

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

char c;

StringBuffer buffer = new StringBuffer();

System.out.println(输入一个字符串以回车符表示结束);

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

while (c!='\r'){

buffer.append(c);

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

}

System.out.println(Output = + buffer.toString());

}

}

运行结果如下:

输入一个字符串以回车符表示结束

abc

Output =abc

分析:该例题中使用了StringBuffer类和System.in.read()方法,在该例题中用循环的方式接收多个字符并且字符个数任意,直到输入回车符结束循环。此方式克服了方法一中只能接收单字符的缺陷,可以输入任何长度的字符,可以通过buffer.toString()输出整个字符串的信息,如果想把字符串的信息转换成别的类型就需要用相应的类型转换方法。

方法三:使用BufferedReader类和InputStreamReader类 [1] 。

InputStreamReader类提供了字节流到字符流的转换。

BufferedReader类它从字符流中读取文本,并且使用字符缓冲器来提高读取效率。

例题4:从键盘输入一个字符串,然后将其打印出来。

import java.io.*;

class shuru4 {

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

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

String s = null;

System.out.print (请输入数据:);

s = a.readLine();

System.out.println(打印出输入的数据:+s);

}

}

运行结果如下:

请输入数据:abcd

打印出输入的数据:abcd

分析:该例题从键盘输入任何长度的字符串数据都可以,按回车符结束输入打印出信息。如果想将输入的字符串数据转换成其它类型的话,使用相应的转换方法就可。

方法四:使用Scanner类、nextLine()、nextInt()、nextFloat()等方法 [3]

Scanner 被称为输入流扫描器类,从控制台读取数据的。Scanner类是一个可以使用正则表达式来解析基本类型和字符串的简单文本扫描器。

例题5:从键盘输入多种类型的数据,然后输出这些数据。

import java.util.Scanner;

class shuru5 {

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 score = sc.nextFloat();

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

System.out.println(姓名:+name+\n+年龄:+age+\n+成绩:+score);

}

}

请输入你的姓名:

aaa

请输入你的年龄:

20

请输入你的成绩:

67.5

你的信息如下:

姓名:aaa

年龄:20

成绩:67.5

分析:这段代码已经表明,Scanner类不管是对于字符串数据还是整型数据或者float类型的数据,只需做一点小小的改变,就能够实现所需要的功能,无疑它是使用起来最方便的。

3. 方法分析

通过以上的例题和说明对各种不同的类的方法做一下简要分析,分析如下:

1) System.in返回的是InputStream指向命令行输入的字节流,StringBuffer类是字符缓冲器类,BufferedReader是字符输入流,Scanner类是文本扫描类。

2) 方法一中的System.in.read()可以接收键盘输入的单个字符,这个单字符可以存储到char类型的变量中,也可以存储到int类型的变量中,但存储的是该字符的ASCII码,对于想从键盘输入多个连续字符的话是不适合的。

3) 方法二中也使用了System.in.read()方法,但是加了一个循环结构,可以在循环条件判断成立的前提下输入多个字符,并且使用append()方法将单个字符追加到StringBuffer类的一个对象中。但缺点是不能随意的接收任何类型的数据存储到其他类型的变量中。

4) 方法三中使用BufferedReader类和InputStreamReader类可以接收一行数据,不需要循环就可以接收多字符,比第一种和第二种方法要方便很多,但也是不能随便接收任何类型的数据直接存储,需要进行类型转换。

5) 方法四中使用Scanner类、nextLine()、nextInt()、nextFloat()等方法完成了接收任何长度、多种类型的数据并存储到不同类型的变量中,而且代码简单,因此这种方法是最有效的方法,所以在编程中建议使用这种方法来完成键盘输入数据。

4. 结束语

本文通过例题运行程序对Java语言中几种不同的键盘输入数据的方法进行了举例和分析,提出在什么情况下使用何种方法最合适。

java语言中实现键盘输入_Java程序设计中的键盘输入数据的方法分析相关推荐

  1. java模拟器键盘输入_Java模拟鼠标和键盘输入

    用途 在电脑(Windows/Mac)上模拟鼠标和键盘输入 Mac运行需要打开相关权限,详见文末说明. 效果图 代码 import java.awt.*; import java.awt.event. ...

  2. java语言二维数组转置_java实现二维数组转置的方法示例

    本文实例讲述了java实现二维数组转置的方法.分享给大家供大家参考,具体如下: 这里在文件中创建Test2.Exchange.Out三个类 在Exchange类中编写exchange()方法,在方法中 ...

  3. 在java中通过过键盘输入_java中从键盘输入

    控制台输入数据 1.1 主方法的形式参数 在 Java 中利用 main(Str... Java中获取键盘输入值的三种方法 2012-11-13 00:00比特网悠虎关键字:Java 程序开发过程中, ...

  4. 下面关于java语言说法不正确的是_数据库应用技术复习 求解1下面关于JAVA语言的说法,错误的是(  )。A.JAVA语言是一种面向对象的程序设计语言。B...

    数据库应用技术复习 求解1下面关于JAVA语言的说法,错误的是( ).A.JAVA语言是一种面向对象的程序设计语言.B 数据库应用技术复习 求解 1下面关于JAVA语言的说法,错误的是( ). A.J ...

  5. java什么是反射 代码说明_java编程中,常提到的反射代码指的是什么?

    展开全部 反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问.检测和修改它本身状态e5a48de588b662616964757a686964616f31333335326232或行 ...

  6. python求三个整数最大值_python 练习题:定义一个getMax()函数,返回三个数(从键盘输入的整数)中的最大值。...

    此题比较简单,不做过多说明. 值得注意的是如何用一行代码让用户一次性输入为多个变量赋值 Python # 定义一个getMax()函数,返回三个数(从键盘输入的整数)中的最大值. def getMax ...

  7. c语言程序执行时无法输入字符串,C语言程序设计中键盘输入数据的方法分析

    1. 引言 C语言程序设计是一门实践性很强的语言课程,在程序设计过程中经常需要从键盘输入所需要的数据.C语言没有专门的输入语句,可以调用C语言编译系统提供的函数库中的库函数来实现.有些程序虽然调试成功 ...

  8. java怎么设置多个输入_Java中从键盘输入多个整数的方法

    Java中从键盘输入多个整数的方法 发布于 2020-4-2| 复制链接 分享一篇关于Java中从键盘输入多个整数的方法,具有很好的参考价值,希望对大家有所帮助.一起跟随小妖过来看看吧 例题:求数列的 ...

  9. java相对应的键盘输入_java接收键盘输入

    Java中获取键盘输入值的三种方法 2012-11-13 00:00比特网悠虎关键字:Java 程序开发过程中,需要从键盘获取输入值是常有的事,但Java它偏偏就没有像c语言给我们...... [解析 ...

最新文章

  1. Shell脚本实战之文件批量创建和修改
  2. at( ) [ ]
  3. mxnet基础到提高(21)-配置mxnet并运行第一个C++程序
  4. struts,ognl,valuestack
  5. C语言二维数组元素的多种表示方法小结
  6. HDU - 5381 The sum of gcd(莫队/线段树区间合并)
  7. Linux shell编程学习总结
  8. java能写复杂的查询么_spring-data-jpa 复杂查询的写法(包含or的查询)
  9. 在EORow或者VORow中对数据进行重复性校验
  10. 科学家奠定了计算机的基础,大学计算机基础考试笔试重点
  11. 深度学习(00)——GPU版本的TensorFlow
  12. nodePPT初认识启动与手机控制
  13. carrot 2 LingoClusteringAlgorithm , STCClusteringAlgorithm 和 BisectingKMeansClusteringAlgorithm算法比较
  14. QDir setSorting 文件排序
  15. 成形滤波器(利用FDATOOL设计成形滤波器)
  16. #include和 #includefilename.h的区别
  17. java jconsole_关于java:JConsole在Linux中的位置
  18. 5G课程笔记--华为ICT课堂(初学)(二)
  19. tensorflow 2.0 基础操作 之 不同 dim 对应的具体含义
  20. ⅰcp经济模型_EOQ经济批量模型上篇(模型基础)

热门文章

  1. QLoo graphql engine 学习二 基本试用(kubernetes)
  2. spring boot / cloud (二十) 相同服务,发布不同版本,支撑并行的业务需求
  3. onCreate onStart onResume onStop onPause onDestroy onRestart onWindowFocusChanged
  4. 《设计原本—计算机科学巨匠Frederick P. Brooks的反思》一一第 3 章 理性模型有哪些缺陷...
  5. 整合重组叠加市场扩容 “广电云”发展将提速
  6. k8s自定义指标HPA实践(微服务基于自定义指标自动扩缩容的实践)附demo
  7. 代码行云流水..这位刚高中毕业的 UP 主,告诉我人的学习能力没有上限
  8. webhooks php,GitHub和WebHooks自动部署PHP项目
  9. 详解linux运维工程师入门级必备技能
  10. mysql 存储过程 光标_mysql存储过程 光标