Scanner对象
之前我们学的语法并没有实现程序和人的交互,但是java给我们提供了这样一个工具类,我们可以获取用户的输入。java.util.Scanner是java5的新特征,包机制,我们可以通过Scanner类来获取用户的输入。
Scanner s=new Scanner(System.in);
通过Scanner类的next()与nextLine()方法获取输入的字符串,在读取前我们一般需要用hasNext()与hasNextLine()判断是否还有输入的数据。
1.测试next()与hasnext()
package com.bao.Flowcontrol;
import java.util.Scanner;
public class Demo01 {
public static void main(String[] args) {
// 创建一个扫描器对象,接收键盘输入数据
Scanner scanner = new Scanner(System.in);
System.out.print("请输入内容: ");
// 判断用户有没有输入
if (scanner.hasNext()) {
// 使用next接收
String str = scanner.next();
System.out.println("输出的内容为:" + str);
} else {
System.out.println("未输入任何内容");
}
a();
//用来关闭Scanner对象的方法,通常用于释放资源,养成良好的习惯。
scanner.close();
}
public static void a() {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入内容: ");
if (scanner.hasNextLine()) {
String str = scanner.nextLine();
System.out.println("输出的内容为:" + str);
} else {
System.out.println("未输入任何内容");
}
//不使用if语句
System.out.print("请输入内容: ");
String a = scanner.nextLine();
System.out.println("输出的内容为:" + a);
scanner.close();
}
}
请输入内容: Hello world
输出的内容为:Hello
请输入内容: Hello world
输出的内容为:Hello world
请输入内容: Hello world
输出的内容为:Hello world
进程已结束,退出代码为 0
该结果表明
next()
: 从当前读取位置开始,遇到空格、制表符或换行符时停止读取,读取的内容不包括空格、制表符或换行符。nextLine()
: 从当前读取位置开始,一直读取到行尾(换行符\n
),包括换行符在内。
2.拓展测试
package com.bao.Flowcontrol;
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.hasNext()){
i=scanner.nextInt();
System.out.println("输入的整数是"+i);
} else {
System.out.println("输入的不是整数!");
}
System.out.println("请输入一个小数");
if(scanner.hasNext()){
f=scanner.nextFloat();
System.out.println("输入的小数是"+f);
} else {
System.out.println("输入的不是小数!");
}
a();
scanner.close();
}
public static void a() {
Scanner scanner = new Scanner(System.in);
double sum =0;
int m=0;
System.out.print("请输入内容: ");
while(scanner.hasNextDouble()){
double x =scanner.nextDouble();
m=m+1;
sum=sum+x;
System.out.println("当前的sum为:"+sum);
}
System.out.println(m+"个数的平均值是"+(sum/m));
System.out.println(m+"个数的和为"+sum);
scanner.close();
}
}
结果:
请输入一个整数:
1
输入的整数是1
请输入一个小数
0.1
输入的小数是0.1
请输入内容:
10
当前的sum为:10.0
20
当前的sum为:30.0
30.3
当前的sum为:60.3
x
3个数的平均值是20.099999999999998
3个数的和为60.3
进程已结束,退出代码为 0
结果:还有nextInt()
、nextDouble()
、nextBoolean()
等方法可以用来读取不同类型的输入。
3.补充:
1.引入概念迭(die)代器:一种设计模式,用于提供一种方法来顺序访问一个聚合对象中的元素,而又不需要暴露其内部表示。迭代器模式使得可以在不了解集合内部结构的情况下,对集合中的元素进行遍历。
2.3个数的平均值是20.09999998是对的,因为数据在二进制十进制之间转换会出现误差,"System.out.printf("%.1f", a);"可以解决