Scanner键盘录入

概述

>(green!)

目前在写Java程序的时候,数据都是写死和固定的,有时为了让程序更具有灵活性,就需要灵活的输入数据。

Scanner的作用就是,灵活的从键盘接收数据输入。

但实际开发中的数据,更多是自于前端页面(用户输入,上传等),所以总体而言Scanner对于Web开发并没有太大的实际作用,了解即可。

但是在JavaSE的学习阶段,我们没有前端和各种界面的输入信息,在单机的情况下,使用Scanner键盘录入是很不错的选择,可以提高程序的灵活性。

并且在某些测试的场景中,Scanner键盘录入也有一定的用途,所以Scanner也有必要学习了解一下。

使用步骤

>(green!)

那么Scanner键盘录入到底应该怎么用呢?

大体上可以分为三步走:

扫描二维码关注公众号,回复: 14745973 查看本文章
  1. 导包 (IDEA有自动导包功能,但是不要认为没有这一步)

    import java.util.Scanner;
    
  2. 创建对象

    Scanner sc = new Scanner(System.in);
    
  3. 接收从键盘录入的数据

    int x = sc.nextInt();
    

注意事项:

  1. 目前阶段,记住步骤会使用就行。以后再来具体分析每步在做什么。

  2. 一般为了方便使用,应该加上提示键盘输入的输出语句。

    参考以下代码案例:

    键盘录入int数据
    Scanner sc = new Scanner(System.in);
    // 键盘接收int数据
    System.out.println("请输入一个int数据:");
    int num = sc.nextInt();
    
  3. 使用Scanner在单独录入数据时,可以选择不同的方法,例如:

    1. 键盘录入String字符串,可以选择使用nextLine方法。
    2. 键盘录入int数值,可以选择使用nextInt方法。
    3. 键盘录入double数值,可以选择使用nextDouble方法。
  4. 使用Scanner在需要录入多种数据类型时,建议不要混用以上方法。比如:

    使用Scanner不同方法录入多种数据
    int num = sc.nextInt();
    String str = sc.nextLine();
    

    这种写法实际上是错误的!

    推荐在有混合录入多种数据的需求时,永远使用nextLine方法,然后将字符串转换成各种需要的数据类型!

    参考以下代码:

    统一使用nextLine方法
    Scanner sc = new Scanner(System.in);
    System.out.println("请键盘录入一个int整数:");
    String numStr = sc.nextLine();
    // 百度查找将String转换成int的方法
    int num = Integer.parseInt(numStr);
    System.out.println("请键盘录入一个字符串:");
    String str = sc.nextLine();
    System.out.println(num);
    System.out.println(str);
    

    当然,如果你对上述用法有疑惑,可以继续往下看学习其中的原因。

    但Scanner本身就是一个了解内容,知不知道原因是无所谓的!

原因

>(green!)

Scanner的使用问题,next()、nextInt()等一系列方法和nextLine()的区别:

  1. next()、nextInt()等一系列方法
    • next()之类的一系列方法遇见第一个有效字符(非空格,非换行符,非制表符)时,开始扫描
    • 当遇见第一个分隔符或结束符(空格、换行符或者制表符)时,结束扫描,获取扫描到的内容
    • 即获得第一个扫描到的不含空格、换行符的单个字符串
  2. nextLine()方法
    • 从方法名上就可以看出来,这个方法是获取一行的内容作为一个字符串被接收
    • 该方法不会因为空格或制表符号而结束扫描
    • 只会因为回车(换行)而结束扫描

>(red!)

由于nextLine()方法碰到换行才结束扫描的特性,所以使用有如下问题:

当使用Scanner接收数值类型后又使用nextLine()方法接收字符串时,例如以下代码:

混用两种Scanner方法
Scanner sc = new Scanner(System.in);
sc.nextInt();
sc.nextLine();

输入数值后回车,会导致程序并不会等待并接收一个字符串,而是直接结束键盘录入。究其原因在于,nextLine()方法碰到回车就结束扫描,所以该方法此时接收的实际上是一个(绝对)空字符串。

解决的办法有很多种:

  1. 可以使用不同的Scanner对象接收,这样肯定不存在冲突问题

  2. 在接收int数据的后面加一个不接收数据的nextLine用来接收回车

  3. 用next()方法接收字符串,但是需要注意该方法以分隔符结束,不再是接收一行了

  4. 可以统一用字符串接收数值类型,接收完毕后再进行类型转换。(具体怎么做,可以自行百度一下)

    例如转换成int类型(传入一个字符串,转换成int接收即可)

    Integer.parseInt()

练习

>(red!)

三道简单的练习题

  1. 键盘录入两个int数据,并对这两个int数据求和,输出其结果。
  2. 键盘录入两个数值,获取这两个数据中的最大值。
  3. 键盘同时录入三个数据,分别为int类型、String类型,double类型,应该怎么做?

>(green!)

参考代码如下:

参考代码1
public static void main(String[] args) {
     
     
 Scanner sc = new Scanner(System.in);
 System.out.print("请输入两个int数值:");
 int num1 = sc.nextInt();
 int num2 = sc.nextInt();
 System.out.println("这两个数值的和是:" + (num1 + num2));
}
参考代码2
public static void main(String[] args) {
     
     
    Scanner sc = new Scanner(System.in);
    System.out.print("请输入两个int数值:");
    int num1 = sc.nextInt();
    int num2 = sc.nextInt();
    System.out.println("这两个数值的最大值是:" + ((num1 > num2) ? num1 : num2));
}
参考代码3
public static void main(String[] args) {
     
     
    Scanner sc = new Scanner(System.in);
    // 混合录入数据类型时,统一使用nextLine方法
    System.out.println("请输入一个int整数:");
    String numStr = sc.nextLine();
    int num = Integer.parseInt(numStr);
    System.out.println("请输入一个字符串:");
    String str = sc.nextLine();
    System.out.println("请输入一个double数据:");
    String doubleStr = sc.nextLine();
    double doubleNum = Double.parseDouble(doubleStr);
}

猜你喜欢

转载自blog.csdn.net/gezongbo/article/details/127127819