scanner类
类和对象
- 对比示例
-
类(设计图) 对象(实际汽车) 描述“汽车是什么” 是一辆真正可以驾驶的汽车 不占用物理空间 停在车库里,占据实际空间 可以有多个对象(实例) 是类的一个具体例子 例如: class Car {...}例如: Car myCar = new Car();
Scanner类
-
Scanner是一个类,它处于java.util包中。而通过这个类创建出来的实例,像new Scanner(System.in)这样的,才被称作对象。 -
类(Class)
Scanner类是Java提供的一个工具类,其作用是解析基本数据类型和字符串。该类包含了众多方法,例如:nextInt():读取一个整数。nextDouble():读取一个双精度浮点数。next():读取一个以空格为分隔符的字符串。nextLine():读取一整行文本,以换行符结束。hasNext():判断是否还有输入数据。hasNextInt():判断下一个输入是否为整数。
这些方法可以帮你从输入源里获取数据。
-
注意事项
- 换行符问题:使用
nextLine()前,若先使用了nextInt()、next()等方法,要先用nextLine()消耗掉残留的换行符。 - 资源管理:使用完毕后,要调用
close()方法关闭Scanner,避免资源浪费。不过关闭标准输入后,无法再次打开。 - 异常处理:若输入的数据类型与读取方法不匹配,会抛出
InputMismatchException异常,建议进行异常处理。
- 换行符问题:使用
-
对象(Object)
当你使用new Scanner(System.in)语句时,就创建了Scanner类的一个对象。这个对象是类的具体实例,能够执行类所定义的方法。 -
举例
package com.xxxx.scanner; import java.util.Scanner; public class Demo01 { public static void main(String[] args) { //创建一个scanner对象,接收用户输入 Scanner scanner = new Scanner(System.in); System.out.println("使用next方式接收:"); //判断用户有没有输入字符串 if (scanner.hasNext()){ //使用next方式接收 String str = scanner.next(); //输入Hello World System.out.println("输出的内容为:"+str); //输出Hello,next():读取一个以空格为分隔符的字符串。 } //凡是IO流的类如果不关闭会一直占用资源,要养成好习惯用完关掉 scanner.close(); } }package com.xxxx.scanner; import java.util.Scanner; public class Demo03 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); //从键盘接收数据 int i = 0; float f = 0.0f; System.out.println("请输入整数:"); if (scanner.hasNextInt()){ i= scanner.nextInt(); System.out.println("整数数据:"+i); }else{ System.out.println("输入的不是整数数据!"); } scanner.close(); } }package com.xxxx.scanner; import java.util.Scanner; public abstract class Demo04 { //可以输入多个数字,并求其总和与平均数,每输入一个数字用回车确认,通过输入非数字来结束输入并输出执行结果 public static void main(String[] args) { Scanner scanner = new Scanner(System.in); //输入new Scanner(System.in);按alt+enter补全。注意要在(main)方法里. //接收和 double sum = 0; //接收数字个数 int m = 0; //判断用户是否还有输入,并在里面对每次进行求和统计 while(scanner.hasNextDouble()){ double x = scanner.nextDouble(); m++; sum = sum + x; System.out.println("你输入了第"+m+"个数据,当前结果为:"+sum); } System.out.println(m+"个数的和为:" + sum); System.out.println(m+"个数的平均值是:" + (sum/m)); scanner.close(); } }