新闻中心
Java中的Scanner类

时间:2021年5月19日 09时20分


  通过近期的一系列文章,我已经介绍了许多电脑与编程相关的知识。从今天开始,我们回到java知识体系来继续了解java编程。

  前面一些文章的案例中,我们会经常使用“System.out.println”这样的语句来输出一些字符串,在javap命令那一节,我也曾说过System.in返回的是一个打印流对象。今天,我将介绍Scanner类的作用,以及“System.in”这样的输入打印流怎样配合Scanner来获取到打印流中的值。如图:

  

  Scanner类用于获取用户输入的数据。该类位于“java.util”包下面。scanner对象的创建需要传入一个输入流对象或者其他的资源对象,比如上图中的案例中,传入的“System.in”,我们也可以传入一个文件对象。Scanner类的常用构造器如下:

  

  还是以图一中的对象为例,使用的构造器参数是System.in,这是System类的一个输入流属性,该属性的值是一个标准的打印流对象,可以获取我们输入给程序的数据。构建好的scanner对象有很多方法,最常使用的是next方法与nextLine方法。但是在从scanner对象取数时,最好先调用hasNextXxx()方法来判断是否还有下一个数据。

  hasNextXxx方法:

  

  使用next方法取数:

  

  使用nextLine取数:

  

  总结:next()方法实际从scanner对象中取出的是下一个字符串。空格、换行会被认为是结束符号。nextLine()方法则是取出下一行的整行数据。

  如果我们有一个需求如下:

  

当用户输入任意的两个数,输出这两个数作“加减乘除”的结果。

 

  怎么完成这个需求呢?

  分析:我们可以使用Scanner类来依次获取到用户输入的两个数,然后将获取到的数赋值给两个变量,再操作两个变量进行“加减乘除”。由于是两个数,所以我们需要调用scanner对象获取用户输入的方法“next”两次。需求中并未讲明输入的数为整数还是小数,所以我们使用double类型来接收这两个数。考虑输入的是double类型,我们采用hasNextDouble()方法判断是否还有下一个数,使用nextDouble()方法取数。代码如下:

  

  注意:

  

System.out.println("此两数之和为:"+(a+b));
此处必须要有括号。否则会先运行:
"此两数之和为:"+a
得到: 此两数之和为:1.5
再加上3.3得到:此两数之和为:1.53.3
这里会有运算的优先级的影响。