Day11-Scanner

Day11-Scanner

Scanner介绍

Scanner 对象:

之前我们学的基本语法中我们并没有实现程序和人的交互,但是 Java 给我们提供了这样一个工具类,我们可以获取用户的输入。

java.util.Scanner 是 Java5 的新特征,我们可以通过 Scanner 类来获取用户的输入。

基本语法:

Scanner s = new Scanner(System.in);

通过 Scanner 类的 next()与 nextLine()方法获取输入的字符串:在读取前我们一般需要使用 hasNext()与 hasNextLine()判断是否还有输入的数据。

java.util.Scanner 的解读:

“java.util.Scanner” 是 Java 编程语言中的一个类。

“java.util” 是 Java 标准库中的一个包(package)名称,这个包中包含了很多实用的工具(utility)类和接口。

“Scanner” 是其中的一个类,它主要用于从标准输入(通常是键盘输入)、文件等来源中读取数据。它提供了方便的方法来解析各种基本数据类型和字符串。

next()与 nextLine()方法分别的用法

一、next()方法

  • next()方法会从输入流中读取下一个单词(以空白字符分隔)。

  • 它会在遇到空白字符(如空格、制表符、换行符等)时停止读取,并返回当前读取到的内容。

  • 假设用户输入 “hello world”,next()方法只会读取到 “hello”,因为它在遇到第一个空白字符时就停止了读取。

    //创建一个扫描器对象,用于接收键盘数据
            Scanner scanner = new Scanner(System.in);
    
            System.out.println("使用next方法接收:");
    
            //判断用户有没有输出字符串
            if(scanner.hasNext()){
                //使用next方法接收——接收单个单词关闭
                String str=scanner.next();    //程序会等到用户输入
                System.out.println("输入的内容为:"+str);
            }
            //属于IO流的类,用完就关闭,否则一直占用资源!!!!!!!!!!!!
            scanner.close();//关闭
    

    输入Hello world时,只输出一个Hello

    使用next方法接收:
    Hello world
    输入的内容为:Hello
    

二、nextLine()方法

  • nextLine()方法会读取输入流中的一整行内容,包括空白字符。
  • 它会读取到当前行的末尾(换行符处),并返回包括换行符之前的所有字符。
 Scanner scanner = new Scanner(System.in);
        System.out.println("使用nextline方法接收:");

        if(scanner.hasNextLine()){
            String str = scanner.nextLine();
            System.out.println("输出的结果为:"+str);
        }
     scanner.close();

hasNext()

在 Java 中,Scanner类的hasNext()方法用于判断输入流中是否还有下一个输入项(token)。

具体解释如下:

一、返回值及用途

  1. 返回值类型:这个方法返回一个布尔值。如果输入流中还有下一个输入项可读取,它就返回true;如果没有更多的输入项可读取,它就返回false
  2. 常见用途:通常在一个循环中使用这个方法来不断检查是否有更多的输入,以便决定是否继续读取输入。

二、输入项的概念

  1. 定义:输入项是指通过输入流提供的、以分隔符(如空格、换行符等)分隔的一块数据。具体的分隔规则取决于Scanner的构造方式和默认的分隔模式。
  2. 示例:如果用户在控制台输入 “hello world”,这里面的 “hello” 和 “world” 可以分别被看作两个输入项。如果输入的是一个整数,那么这个整数就是一个输入项。

三、与其他方法配合使用

  1. next()方法配合:通常在使用next()方法读取输入项之前,先使用hasNext()方法进行判断,以确保不会在没有输入项可读取时调用next()方法而导致异常。

遇见某一个类,选中,按住Ctrl键,单击鼠标,就进入了类的源代码

实际应用:判断输入的是不是整数/小数

Scanner scanner = new Scanner(System.in);

        //从键盘接收数据
        int i1=0;
        float i2=0.0f;
        System.out.println("请输入整数:");
        if(scanner.hasNextInt()){
           i1 = scanner.nextInt();
            System.out.println("输入的整数是:"+i1);
        }else {System.out.println("你输入的不是整数");}


        System.out.println("请输入小数:");
        if(scanner.hasNextFloat()){
            i2 = scanner.nextFloat();
            System.out.println("输入的小数是:"+i2);
        }else {System.out.println("你输入的不是小数");}



        scanner.close();

易出错的地方:

//判断输入的是不是小数
Scanner scanner = new Scanner(System.in);
        System.out.println("请输入小数:");
        if(scanner.hasNextDouble()){
            double a= scanner.nextDouble();
            System.out.println("输入的小数是:"+a);
        }else {
            System.out.println("这个书不是小数");
        }
        Scanner close;
 //输入的是12345,是一个整数,应该输出的是"这个书不是小数",但是输出的是12345.0。
 //出错了!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 //当你在Java中使用Scanner类的nextDouble()方法来读取输入时,即使用户输入的是一个整数值(如 12345),这个方法也会将它当作双精度浮点数(double)来读取和处理。这意味着,无论输入的是整数还是真正的小数,只要它是有效的数值,都会被当作带有小数点的格式存储在 double 变量中。因此,整数 12345 会被读入并显示为 12345.0。
 
 
 
 
 
 
 
 //解决思路:如果你想要区分用户输入的是整数还是小数,就需要在读取之后做一些额外的检查,比如比较该值是否与其强制转换为 int 类型的值相等。如果两者相等,则说明输入的是一个整数;否则,就是一个小数。
 import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        System.out.println("请输入一个数:");
        
        if (scanner.hasNextDouble()) {
            double input = scanner.nextDouble();
            
            // 如果input和它的整数部分相等,那么它就是一个整数
            if (input == (int) input) {
                System.out.println("这个数不是小数");
            } else {
                System.out.println("输入的小数是:" + input);
            }
        } else {
            System.out.println("输入的不是一个有效的数字!");
        }
        
        scanner.close();
    }
}

实际应用:将输入的数据求和、求平均值

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

        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入:");
        //和
        double sum=0;
        //有多少个数
        int num=0;

        //通过循环判断是否有数字,并进行求和和数量统计
        while(scanner.hasNextDouble()){
             sum+=scanner.nextDouble();
            num=num+1;//num++
            System.out.println("你输入了第"+num+"个数,当前的和是"+sum);


        }
        System.out.println(num+"个数的和是"+sum);
        System.out.println(num+"个数的平均数:"+(sum/num));
        scanner.close();
posted @ 2024-10-07 18:12  1hahahahahahahaha  阅读(5)  评论(0编辑  收藏  举报