前面讲了Scanner的 next() 和nextLine()的基础用法,这个章节是带控制语句的实战练习,顺便带出nextInt()
,nextFloat()
,nextDouble()
三种方法。
A. Scanner的 nextInt()
和 nextFloat()
用法:
package com.zctou.scanner;
import java.util.Scanner;
public class Demo03 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
//接收数据
int i1 = 0 ;
float f1 = 0.0F ;
//整数部分
System.out.println("请输入一个整数: ");
if(scanner.hasNextInt()) {
i1 = scanner.nextInt();
System.out.println("您输入的: " + i1 + "是一个整数。");
} else {
System.out.println("您输入的: " + i1 + "不是一个整数。");
}
//浮点数部分
if(scanner.hasNextFloat()) {
f1 = scanner.nextFloat();
System.out.println("您输入的: " + f1 + "是一个小数。");
} else {
System.out.println("您输入的: " + f1 + "不是一个小数。");
}
scanner.close();
}
}
输出:
例子一:
请输入一个整数:
x //输入了字符
您输入的: 0不是一个整数。
您输入的: 0.0不是一个小数。
---------
例子二:
请输入一个整数:
//输入了空格,要求重新输入
//输入了回车,要求重新输入
1
您输入的: 1是一个整数。
//输入了空格,要求重新输入
1.1
您输入的: 1.1是一个小数。
----
例子三:
请输入一个整数:
1212 12.1 //输入了2组数字,程序直接跳过了第二次输入请求,并赋值给f1
您输入的: 1212是一个整数。
您输入的: 12.1是一个小数。
-------
例子四:
请输入一个整数: //走的正常流程,按提示输入
1
您输入的: 1是一个整数。
11.2
您输入的: 11.2是一个小数。
可以看到nextInt()
和nextFloat()
跟next()是一样的,都会捕获有效字符串,并去除两边的空格。但
nextInt()
和nextFloat()
一样,接收到中间有空格 的字符串(1212 12.1
)时,scanner 会所字符串以“ ”(空格)为分隔符,变成一个数组存储数据。所以例子三中输入了(
1212 12.1
)时,程序不再要求输入数据。
B. nextDouble() 用法
package com.zctou.scanner;
import java.util.Scanner;
public class Demo04 {
public static void main(String[] args) {
//我们要输入多个数字,并求和与平均数。每输入一个数字用回车确认,通过输入非数字来结束输入并输出结果;
Scanner scanner = new Scanner(System.in);
//和
double sum = 0 ;
// 输入数字的个数
int num = 0 ;
while(scanner.hasNextDouble()) {
double x = scanner.nextDouble();
num = num + 1 ;
sum = sum + x ;
}
System.out.println(num + "个数求和结果为:" + sum);
System.out.println(num + "个数求平均值为:" + sum / num);
scanner.close();
}
}
输出结果:
10
30
39
x
3个数求和结果为:79.0
3个数求平均值为:26.333333333333332
----------
10 10
10 21
12 x
5个数求和结果为:63.0
5个数求平均值为:12.6
可以看到nextDouble()
方法跟nextInt()
,nextFloat()
没区别,也会以" "空格为分割符分开字符串的数字。唯一区别是就数据类型(数据类型要参考以前的章节),掌握基础就很好把握。