Scanner类(java.util.Scanner)讲解

JavaSE 专栏收录该内容
16 篇文章 0 订阅

Scanner类(java.util.Scanner

需求:获取用户从键盘输入的年龄、姓名和成绩

解决方法:使用Scanner类

Scanner类的实现步骤

  1. 在有效代码的第一行,通过import关键字导入Scanner类,简言之,导包

    例如: import java.util.Scanner

    等价于 java.util.Scanner input = new java.util.Scanner(System.in);可这样写,但不建议

    注意:若要访问Scanner对象中属性|调用其中的方法,首先需要导包,Scanner&String|System不一样,String和System属于java.lang包中,不需要我们手动导入,Scanner属于java.util包中的,需要我们手动导入,Scanner类和String类都是系统提前给我们定义好的类

  2. 通过new关键字实例化一个Scanner对象,简言之,实例化Scanner对象

    例如:Scanner input = new Scanner(System.in);

    上一行代码唯一可遍的是input变量名

    简单分析Scanner input = new Scanner(System.in);

    分析:将”=“等号右侧的Scanner对象赋值给了左侧的Scanner类型的变量input,那就说明input中存的就是Scanner这个对象

    注意:java中的类都属于引用数据类型

  3. 通过Scanner对象来调用Scanner类中的方法,用户获取用户在控制台输入的内容,简言之,调用方法

    获取基本数据类型的数据

    方法名称方法所实现的功能返回值类型
    nextByte()获取用户从控制台输入的-27~27-1范围内的整数byte
    nextInt()获取用户在控制台输入的-231~231-1范围内的整数int
    nextShort()获取用户在控制台输入的-215~215-1范围内的整数short
    nextLong()获取用户在控制台输入的-263~263-1范围内的整数long
    nextFloat()获取用户在控制台输入的单精度类型的小数float
    nextDouble()获取用户在控制台输入的双精度类型的小数double
    nextBoolean()获取用户在控制台输入的true|falseboolean

    – >当用户输完对应内容并敲回车,获取的是第一个空格前的内容

    代码展示:

    // 1. 导包
    import java.util.Scanner;
    public class ScannerTest{
        public static void main(String[] agrs){
            // 2. 实例化Scanner对象
            Scanner input = new Scanner(System.in);
            // 提示性文字
            System.out.println("请输入整数:");
            // 3. 调用方法
            byte a = input.nextByte();
            System.out.println("您输入的整数为"+a );
            System.out.println("请输入整数:");
            short b = input.nextShort();
            System.out.println("您输入的整数为"+b);
            System.out.println("请输入整数:");
            int c = input.nextInt();
            System.out.println("您输入的整数为"+c);
             System.out.println("请输入整数:");
            long d = input.nextLong();
            System.out.println("您输入的整数为"+d);
            System.out.println("请输入小数:");
            double e = input.nextDouble();
            System.out.println("您输入的小数为"+e);
            System.out.println("请输入小数:");
           	float f = input.nextFloat();
            System.out.println("您输入的小数为"+f);
            System.out.println("请输入true|flase:");
            boolean g = input.nextBoolean();
            System.out.println("您输入的Boolean类型的值为"+g);
        }
    }
    

    运行截图:
    在这里插入图片描述

    获取引用数据类型的数据

    方法名称功能返回值类型
    next()获取用户从控制台输入的第一个空格前的字符串string
    nextLine()获取用户从控制台输入的一整行字符串string

    代码展示:

    import java.util.Scanner;
    public class nextTest{
        public static void main(String[] args){
            Scanner input =  new Scanner(System.in);
            System.out.println("请您输入内容");
            String str =  input.next();
            System.out.println("您输入的内容为" + str);
            System.out.println("请您接着输入内容:");
            String sstr1 =  input.nextLine();
            System.out.println("您接着输入的内容为" + str1);
        }
    }
    

    运行截图:
    在这里插入图片描述

根据以上需求,使用代码来实现:

代码展示:

// 1. 导包
import java.util.Scanner;
public class ScannerDemo{
    public static void main(String[] args){
        // 2. 实例化对象
        Scanner input =  new Scanner(System.in);
        // 提示用户输入,为了提高用户体验
        System.out.println("请输入学生姓名");
        // 3.调用方法
        String name  = input.next();
        System.out.println("My name is" + name);
        System.out.println("请输入学生年龄:");
        int age =  input.nextInt();
        System.out.println(name + "的年龄为"+age);
        System.out.println("请输入学生成绩:");
        int score = input.nextInt();
        System.out.println(name + "的成绩为" + score);
    }
}

运行截图:
在这里插入图片描述


Scanner使用的注意事项

  1. 当执行Scanner对象中的方法时,会阻塞代码的执行,输入完后内容后并敲回车键(Enter),然后根据调用的Scanner对象中对应的方法,获取用户输入的对应内容并赋值给”=“号左边的变量中,然后结束代码的阻塞效果,继续执行下一行代码

  2. 为了提高用户的体验,在调用Scanner对象中的方法前先输出提示性文字,提示用户输入的内容

    import java.util.Scanner;
    public class alertMsg{
        public static void main(String[] args){
           System.out.println("请输入您的名字:");
           String name = new Scanner(System.in).next();
           System.out.println("My name is" + name);
        }
    }
    
  3. 输入的内容一定要和调用Scanner对象中的方法返回值类型保持一致,否则会抛出java.util.InputMismatchException异常

    代码展示:

    // 1. 导包
    import java.util.Scanner;
    public class ExceptionTest{
        public static void main(String[] args){
            // 2. 实例化对象
            Scanner  input  = new Scanner(System.in);
             System.out.println("请输入内容:");
            // 3. 调用方法
             int num = input.nextInt();
            System.out.println("您输入的内容为:" + num);
        }
    }
    

    运行截图:
    在这里插入图片描述

  4. Scanner类中没提供nextChar()方法,若需获取用户控制台输入的字符,可配合String类的charAt()方法来实现

    问题:如何实现获取用户从控制台中输入的字符?

    代码展示:

    // 第一步,导包
    import java.util.Scanner;
    public class GetChar{
        public static void main(String[] args){
            // 第二步,实例化Scanner对象
            Scanner input =  new Scanner(System.in);
            // 提示用户输入,为了提高用户体验
            System.out.println("请输入字符串:");
            // 第三步,调用方法
            String charStr =  input.nextLine();
            System.out.println("正在获取字符串中的字符...");
            System.out.println("字符 char = " + charStr.charAt(0));
        }
    }
    

    运行截图:
    在这里插入图片描述

  5. Scanner只会在JavaSE中用到,在JavaScript中用的是window对象的询问框prompt(message,[defaultValue])

    JS中询问框的使用:

    代码展示:

    var name = prompt("请输入姓名:","小编");
    document.write("My name is" + name);
    

    运行截图:
    在这里插入图片描述
    在这里插入图片描述

脚下留心

代码展示:

// 第一步. 导包
import java.util.Scanner;
public class ScannerDemo{
    public static void main(String[] args){
        //第一步 实例化Scanner对象
        Scanner input  =  new Scanner(System.in);
        // 提示用户输入年龄,提高用户体验
        System.out.println("请输入年龄");
        // 第三步,调用方法
        int age =  input.nextInt();
        System.out.println("My age is" + age);
        // 提示用户输入姓名
        System.out.println("请输入姓名:");
        String name = input.nextLine();
        System.out.println("My name is" + name);       
    }
}

运行截图:
在这里插入图片描述
由运行截图得知一个问题:
先通过nextInt()方法获取用户从控制台输入的年龄(整数),然后在通过nextLine()获取用户从控制台输入的姓名(字符串),结果发现,当获取完年龄后,程序没让我直接输出姓名,程序就直接结束了,这是什么原因引起的呢?

产生原因:

执行nextLine()方法时,首先检查内存是否包含换行符,若包含,那直接获取换行符之前的内容而不是用户输入,获取完毕之后吃掉内存中的换行符

解决方式:
先执行一遍nextLine()方法,然后在获取用户从控制台中输入的姓名

解决以上错误的代码展示:

// 1. 导包
import java.util.Scanner;
public class ScannerDemo{
    public static void main(String[] args){
       // 2. 实例化Scanner对象
        Scanner input =  new Scanner(System.in);
        // 提示用户输入,为了提高用户体验
        System.out.println("请输入年龄:");
        // 3. 调用方法
        int age = input.nextInt();
        System.out.println("My age is " + age);   
         System.out.println("请输入姓名:");
        // 下面这行代码至关重要
        input.nextLine();
        String name = input.nextLine();
        System.out.println("My name is" + name);
    }
}

运行截图:
在这里插入图片描述


此文章于11月20日编辑完毕,小编也是个初学者,或许有些内容写的有错误的,我对自己的要求是:有错改之,无错加勉。还望大家能在评论区指点迷津,不胜感激,同时也希望大家口下留情!!

  • 11
    点赞
  • 2
    评论
  • 24
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值