简单的用户交互Scanner

不知道各位是不是,在我一开始接触Java的时候,看的两本书好像都是,在啥都没有学的时候,就已经看见了这个Scanner,所以这一篇博客就来说一下Scanner的使用:

我感觉在新手学习阶段中(就我现在的这阶段),Scanner是程序与人交互的最简单的一种方式,这是Java给我们提供的一个工具类,我们可以使用这个类做一些简单的输入,就是获取数据。Scanner是Java5的新特征,在java.util这个包下面,我们可以通过 Scanner 类来获取用户的输入。

其实说起来挺高大上的,什么用户交互啊,获取数据啊之类的,其实这一块是很简单的,基本上都是一些死代码。

下面是创建 Scanner 对象的基本语法:

1 Scanner s = new Scanner(System.in);

接下来我们演示一个最简单的数据输入,并通过 Scanner 类的 next() 与 nextLine() 方法获取输入的字符串,在读取前我们一般需要 使用hasNext()与hasNextLine() 判断是否还有输入的数据。

 

1、next&nextLine

我们可以使用next方式接收一下输入的数据:

 1 public static void main(String[] args) {
 2     //创建一个扫描器对象,用于接收键盘数据
 3     Scanner scanner = new Scanner(System.in);
 4     //next方式接收字符串
 5     System.out.println("Next方式接收:");
 6     //判断用户还有没有输入字符
 7     if (scanner.hasNext()){
 8         String str = scanner.next();
 9         System.out.println("输入内容:"+str);
10     }
11     //凡是属于IO流的类如果不关闭会一直占用资源.要养成好习惯用完就关掉.就好像你接水完了要关水龙头一样.很多下载软件或者视频软件如果你不彻底关,都会自己上传下载从而占用资源,你就会觉得卡,这一个道理.
14     scanner.close();
15 }
16         

测试数据:Hello World!

结果:Hello

实际测试代码后会发现,只输出了Hello,而没有输出后续的部分。

接下来我们使用另一个方法来接收数据:nextLine()

 1 public static void main(String[] args) {
 2     Scanner scan = new Scanner(System.in);
 3     // 从键盘接收数据
 4     // nextLine方式接收字符串
 5     System.out.println("nextLine方式接收:");
 6     // 判断是否还有输入
 7     if (scan.hasNextLine()) {
 8         String str2 = scan.nextLine();
 9         System.out.println("输入内容:" + str2);
10     }
11     scan.close();
12 }

测试数据:Hello World!

结果:Hello World!

经过测试会发现使用nextLine()方法的话,不仅仅输出了Hello,后续的也被一起输出了。

可以发现,这两个方法还是有很大区别的,所以我们大概总结一下两者的不同:

  next():

    1、一定要读取到有效字符后才可以结束输入。

    2、对输入有效字符之前遇到的空白,next() 方法会自动将其去掉。

    3、只有输入有效字符后才将其后面输入的空白作为分隔符或者结束符。

    4、next() 不能得到带有空格的字符串。

  nextLine():

    1、以Enter为结束符,也就是说 nextLine()方法返回的是输入回车之前的所有字符。

    2、可以获得空白

 

2、其他方法:

通过上面的代码,我们可以发现,scanner可以使用next()和nextLine()来接收代码,但是我们也可以发现,使用这两个方法接收的都是String字符串类型的对象,那么如果我们要是想要接收其他类型的数据怎么办呢?

这也好办,scanner中既然给我们提供了获取字符串的方法,那么也自然提供了获取其他数据类型的方法:

  可以使用nextXxx()的方法来获取数据。

这里我们使用int和float类型来举例说:

 1 public static void main(String[] args) {
 2     Scanner scan = new Scanner(System.in);
 3     // 从键盘接收数据
 4     int i = 0;
 5     float f = 0.0f;
 6     System.out.print("输入整数:");
 7     if (scan.hasNextInt()) {
 8             // 判断输入的是否是整数
 9             i = scan.nextInt();
10             // 接收整数
11             System.out.println("整数数据:" + i);
12         } else {
13             // 输入错误的信息
14             System.out.println("输入的不是整数!");
15     }
16     System.out.print("输入小数:");
17     if (scan.hasNextFloat()) {
18         // 判断输入的是否是小数
19         f = scan.nextFloat();
20         // 接收小数
21         System.out.println("小数数据:" + f);
22     } else {
23         // 输入错误的信息
24         System.out.println("输入的不是小数!");
25     }
26     scan.close();
27 }
28     

以下实例我们可以输入多个数字,并求其总和与平均数,每输入一个数字用回车确认,通过输入非数字 来结束输入并输出执行结果:

 1 public static void main(String[] args) {
 2     //扫描器接收键盘数据
 3     Scanner scan = new Scanner(System.in);
 4     double sum = 0; //
 5     int m = 0; //输入了多少个数字
 6     //通过循环判断是否还有输入,并在里面对每一次进行求和和统计
 7     while (scan.hasNextDouble()) {
 8         double x = scan.nextDouble();
 9         m = m + 1;
10         sum = sum + x;
11     }
12     System.out.println(m + "个数的和为" + sum);
13     System.out.println(m + "个数的平均值是" + (sum / m));
14     scan.close();
15 }

 

到这里可能一些新伙伴才接触java,就不知道写的是什么意思了,这里我们使用了我们后面要学的流程控制语句,会在下一篇博客和大家继续聊一聊。

posted @ 2021-02-26 10:38  |好的|  阅读(97)  评论(0编辑  收藏  举报