关于java的用户交互Scanner

2023-12-29 19:28:11

关于java的用户交互Scanner

在之前的文章中,我们学会了java的一些基础,语法等,但是并没有实现程序和人之间的交互, 所以java提供了一个工具类,可以让我们获取到用户的输入,本篇文章会详细介绍一下,内容比较多,也可能会有些许的难理解,所以一定要反复去看,反复的去练习,结合现实生活去理解本质😀。

Scanner类

  • Scanner相当于一个扫描器,可以读取到用户通过键盘,输入的内容。

  • 使用这个类的时候,需要创建扫描器对象(通俗来说,就是怎么把他拿过来用😀)

  • 使用方法:Scanner +对象名(自定义,一般常用scanner)=new Scanner(Sysyem.in);

  • 注意事项:用完这个Scanner扫描器,凡是像这种属于IO流的类,都需要将它关闭掉,否者会一直占用资源,导致程序卡顿。

    ? scanner.close(); 这行代码就是用于关闭。

import java.util.Scanner; //导入Scanner包,自动生成

public class Demo
{
    public static void main(String[] args)
    {
        Scanner scanner = new Scanner(System.in);
        
        //中间写内容
        
        scanner.close();
    }
}

如上述代码,我们要养成习惯,把Scanner拿过来用的时候,在下方直接写出一个关闭,以免忘记释放。

  • 我们需要通过,Scanner类中的next(),nextLine() 方法来获取用户输入的内容,这两个类型是用于接收字符串类型的内容的,我们下文中还会介绍其他类型的方法,大同小异😊。

  • 在我们读取之前,一般都会用hasNext(),hasNextLine() 方法来判断用户是否还有输出内容。

    可能光看文字描述有点难理解,我们下面通过代码介绍一下具体用法。

import java.util.Scanner;

public class Demo
{
    public static void main(String[] args)
    {
        Scanner scanner = new Scanner(System.in);//把Scanner拿过来用
        
        System.out.println("这里我们用next方法接收");
        
        if(scanner.hasNext())//判断用户是否有输入的内容
        {
            String str=scanner.next();//等待用户的输入内容,声明一个String类型的字符串进行存储。
            
            System.out.println("输入的内容为:"+str);
        }
        
        scanner.close();
    }
}

我们写好了以后,运行一下代码,会看到下面内容😀。

这里我们用next方法接收     //这里程序不会运行完成,在等待输入内容,我们按回车进行输入
hello world				//我们输入一个hello world
输入的内容为:hello		//输出结果

进程已结束........

这里我们看到,我们输入的内容是hello world 但是程序给返回的结果却是hello,下面就说明一下next()和nextLine()的区别。

next()和nextLine()的区别

  • next()

    1、一定在读到有效字符的时候,才可以结束输入。

    2、在输入有效字符之前遇到的空格,next()会自动去掉空格,如果输入 hello,因为空格在前面,所以就会自动去掉空格,将hello作为结果输出。

    3、在输入有效字符后,将有效字符后边的空格,作为分隔符或者结束标志,刚刚输入的hello world ,因为world前面有空格,前面也有hello这个有效字符了,所以程序中会默认空格为结束字符,将后边的world去掉了。

    4、next()不能输出带有空格的字符串 ,我们如果想用next()方法输出刚刚的hello world,我们可以输入hello,world,这样就可以正常输出了。

  • nextLine()

    1、可以获取空白!我们用这个方法输入hello world ,可以正常输出。

    2、next()方法是空格作为结束标识,但是nextLine()是以回车作为结束标识。

    用法是一样的,就是一个带line一个不带,所以功能是不同的😊下面我们来展示一下nextLine()方法。

import java.util.Scanner;

public class Demo
{
    public static void main(String[] args)
    {
        Scanner scanner = new Scanner(System.in);//把Scanner拿过来用
        
        System.out.println("这里我们用nextLine方法接收");
        
        if(scanner.hasNextLine())//判断用户是否有输入的内容
        {
            String str=scanner.nextLine();//等待用户的输入内容,声明一个String类型的字符串进行存储。
            
            System.out.println("输入的内容为:"+str);
        }
        
        scanner.close();
    }
}

和next()用法的区别就是在next后边加了一个Line,这样我们运行就会看到如下内容。

这里我们用next方法接收      //这里程序不会运行完成,在等待输入内容,我们按回车进行输入
hello world				 //我们输入一个hello world
输入的内容为:hello world	//输出结果

进程已结束........

在上面的介绍中,我们都使用了if,if的判断用法我们以后的文章中会说到,是java流程控制的一种,我们也可以去掉if,直接使用。

import java.util.Scanner;

public class Demo
{
    public static void main(String[] args)
    {
        Scanner scanner =new Scanner(System.in);
        
        String str =scanner.next();
        
        System.out.println("用户输入的内容是:");
        
        scanner.close();
    }
}
  • 我们上面是用字符串类型,最基础的next()和nextLine()做的介绍,下面我们不输入字符串类型,输出别的类型尝试一下,顺便了解一下Scanner这个类中的多种方法。

    我们来试一下int类型的输入。

  • nextInt()
import java.util.Scanner;

public class Demo
{
    public static void main(String[] args)
    {
        Scanner scanner =new Scanner(System.in);
        
        int a=0;//从键盘接收数据,初始化值为0
        
        System.out.println("请输入整数:");
        
        if(scanner.hasNextInt())//判断输入的是否为整数
        {
            a=scanner.nextInt();//等待用户输入整数
            
            System.out.println("输入的内容是:"+a);
        }
        else
        {
            System.out.println("输入的内容不是整数!")
        }
        
        scanner.close();
    }
}

这个就是nextInt()方法,我们可以运行一下就可以看到一下内容。

请输入整数:				//按回车
6						//按回车代表完成,结束
输入的内容是:6		   //输出结果

进程已结束........

如果我们不输入整数,输入一个小数6.5,我们再看一下结果。

请输入整数:				//按回车
6.5						//按回车代表完成,结束
输入的内容不是整数!		   //输出结果

进程已结束........

上述的方法是接收int类型的内容的,其他类型也是同样道理,我们再来看一下小数类型的。

  • nextFloat()
import java.util.Scanner;

public class Demo
{
    public static void main(String[] args)
    {
        Scanner scanner =new Scanner(System.in);
        
        float a=0.0;//从键盘接收数据,初始化值为0.0
        
        System.out.println("请输入小数:");
        
        if(scanner.hasNextFloat())//判断输入的是否为整数
        {
            a=scanner.nextFloat();//等待用户输入整数
            
            System.out.println("输入的内容是:"+a);
        }
        else
        {
            System.out.println("输入的内容不是小数!")
        }
        
        scanner.close();
    }
}

拓展练习

我们在了解好Scanner类以及类中的方法,需要实战练习一下,顺便向大家多透露一些流程控制,也是作为了解,我们以后的文章中会详细说明😀

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

首先我们来分析一下这个需求

  • 输入的是数字,有可能是小数,所以我们要定义double类型去接收用户输入。
  • 求和,求平均值,就用到了我们以前文章中说到的运算符,可以用double去接。
  • 每输入一个数字,回车确认,需要用到循环(刚刚说要透漏的😉)。
  • 通过非数字来结束输出,就是输入一个非数字代表进程结束。

我们来按照上面分解后的需求去逐步完成。

import java.util.Scanner;

public class Demo
{
	public static void main(String[] args)
    {
        Scanner scanner = new Scanner(System.in);
        
        int a=0;//计算输入了多少个数
        
        double sum=0.0;//和
        
        System.out.println("请输入:");
        
        while(scanner.hasNextDouble())//循环判断是否还在输入
        {
            double x=scanner.nextDouble();//等待用户输入
            
            a=a+1;//每次循环,数量加1,用来展示用户输入到哪个数了。
            
            sum=sum+x;//每次循环,当前数+输入的数
            
            System.out.println("你输入了第"+a+"个数据,当前结果是:"+sum);
        }
        
        System.out.println("输入共计"+a+"个数,总和是:"+sum);
            
        System.out.println("输入共计"+a+"个数,平均值是:"+(sum/a));
        
        scanner.close();
    }
}

我们写完以后,编译运行一下,可以看到一下内容。

请输入:		//按回车
1.5
你输入了第1个数据,当前结果为1.5		//a=0+1=1 , sum=0+1.5=1.5
2.5
你输入了第2个数据,当前结果为4.0		//a=1+1=2 , sum=1.5+2.5=4.0
55
你输入了第3个数据,当前结果为59.0		//a=2+1=3 , sum=4.0+55=59.0
1
你输入了第4个数据,当前结果为60.0		//a=3+1=4 , sum=59.0+1=60.0
*								 //非数字,代表结束
输入共计4个数,总和为:60.0
输入共计4个数,平均值为:15.0

以上就是Scanner的介绍以及应用方法,第一遍去看可能会觉得云里雾里,反复去练习,结合之前文章中的知识来理解就会恍然大悟💪

文章来源:https://blog.csdn.net/SpringYang11/article/details/135254834
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。