Scanner类
-
作用:
实现人与程序交互,使接收用户的输入内容。 -
语法:
//System.in 代表用户输入的内容 Scanner sc = new Scanner(System.in)
-
主要方法:
//判断和接收字符串,在判断语句中使用,hasNext()判断是否还有输入,如果有再用next()接收 hasNext() next() //判断和接收字符串,在判断语句中使用,hasNextLine()判断是否还有输入,如果有再用nextLine()接收 hasNextLine() nextLine() //判断和接收int型数字 hasNextInt() nextInt() //判断和接收float型浮点数 hasNextFloat() nextFloat() //判断和就收double型浮点数 hasNextDouble() nextDouble() // short byte long boolean BigDecimal BigInteger 等等...
说明:
1、方法主要分为三大类,第一类是
hasNext()
和next()
、hasNextLine()
和nextLine()
,第二类是hasNext数据类型()
和next数据类型()
。
2、第一类用于接收字符串(区别在于能否处理空格,如下面所说),第二类用于接收不同的数据类型。has
开头的是判断,结果是boolean
类型。next
开头的是获取。
3、除了nextLine()
,其他的next数据类型()
都与next()
类似。
4、输入的数据是什么类型,接收时就要使用接收对应类型的方法。next()和nextLine()的区别:
next():
1、一定要读取到有效字符(输入空格不算有效字符)后才可以使用回车结束输入。 2、显示结果时,next() 方法会自动去掉有效字符之前的空格。 3、有效字符后的空格会被程序当作结束标志。 4、next() 不能得到含有空格的字符串。
public class Test { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("请输入内容"); if (sc.hasNext()){ Object o = sc.next(); System.out.println(o); } } } //如果输入:Hey Brother //输出结果为:Hey
nextLine():
1、以回车为结束符,也就是说 nextLine() 方法返回的是输入回车之前的所有字符包括空格。 2、可以获得空格。
说明:
Scanner 使用完要记得使用其对象点close()方法关闭。
有个练习题可以参考下:
输入多个数字,求其总和与平均数,每输入一个数字用回车确认,通过输入非数字来结束输入并输出执行结果。(不难,但是对于小白来说第一时间也不会直接想处方案,对于问题我们尽量自己研究、尝试,去寻找答案)
import java.util.Scanner;
class Test {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入数字");
//存放数字的总和
double sum = 0;
//存放输入数字的个数,每次输入一个数字
int m = 0;
//使用while循环(根据题意,通过输入非数字来结束输入),其条件可以判断输入的是不是数字,如果不是数字会跳出循环并输出结果。此处也可以使用其他循环。
while (sc.hasNextDouble()) {
double x = sc.nextDouble();
m = m + 1;
sum = sum + x;
}
System.out.println(m+"个数的总和为" + sum);
System.out.println(m + "个数的平均值是" + (sum / m));
//程序执行结束后,关闭Scanner释放资源
sc.close();
}
}
记录一个idea功能。
- CTRL+鼠标左键 去点击代码,会进入该代码的源码,此时点击idea左侧的Structure可以看到源码的目录结构。
hasNext数据类型()和next数据类型()两个方法的意义
if (sc.hasNext()){
Object o = sc.next();
System.out.println(o);
}
这个结构存在的意义,在于使你输入的参数类型与程序接受的参数类型一致,如果去掉上面的判断结构,输入与接收的数据类型可能不同而导致程序报错。