关于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类型的内容的,其他类型也是同样道理,我们再来看一下小数类型的。
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的介绍以及应用方法,第一遍去看可能会觉得云里雾里,反复去练习,结合之前文章中的知识来理解就会恍然大悟💪