Java给我们提供了一个名为java.util.Scanner的工具类,让我们可以获取用户的输入,他是java5的新特征,我们可以通过Scanner类来获取用户的输入.
基本语法:
Scanner scanner = new Scanner(System.in);
通过Scaner类的next()与nextLine()方法获取输入的字符串,在读取前我们一般需要使用hasNext()与hasNextLine()判断是否还有输入的数据.
next():1.一定要读取到有效的字符后才可以结束输入
2.对输入有效字符之前遇到的空白,next()方法会自动将其去掉
3.只有输入有效字符后才将其后面输入的空白作为分隔符或者结束符.
4.next()不能得到带有空格的字符串
实例:
public static void main(String[] args) {
Scanner s = new Scanner(System.in);//实例化Scanner对象
while(true){//死循环无限重复
if(s.hasNext()){//使用hasNext()方法检测键盘上是否有输入
String str = s.next();//使用字符串类型变量储存next()方法监测到的输入内容
if(str.equals("退出")){//退出条件的判断式-当控制台输入退出时条件达成---.equals()用于判断使用这个方法的字符串的值是否与括号内的字符串的值相等
System.out.println("已退出");//提示已退出
break;//退出循环 -与死循环配合
}else{//if的条件没达成时执行下列内容(输入除"退出"以外的内容时)
System.out.println(str);//输出next()方法检监测到的并储存在字符串str内的数据
}
}
}
s.close();//关闭Scanner占据的io流
}
效果演示图:
nextLine():1.以Enter为结束符,也就是说nextLine()方法返回的是输入回车之前的所有字符.
2.可以获得空白.
实例:
public static void main(String[] args) {
Scanner s = new Scanner(System.in);//实例化Scanner对象
while(true){//死循环无限重复
if(s.hasNextLine()){//使用hasNextLine()方法检测键盘上是否有下一行的输入
String str = s.nextLine();//使用字符串类型变量储存nextLine()方法监测到的一整行的输入内容,空格也被检测到
if(str.equals("退出")){//退出条件的判断式-当控制台输入退出时条件达成---.equals()用于判断使用这个方法的字符串的值是否与括号内的字符串的值相等
System.out.println("已退出");//提示已退出
break;//条件达成时跳出循环-与之前的死循环配合
}else{//if的条件没达成时执行下列内容(输入除"退出"以外的内容时)
System.out.println(str);//输出next()方法检监测到的并储存在字符串str内的数据
}
}
}
s.close();//关闭Scanner占据的io流
}
效果演示图:
本节小课堂:.equals()与 ==的区别:
==验证的是对象所指向的内存地址, 而不是对象的值, 在验证不同对象的值是否相同时, 会缺失精准度;
.equals()验证的是对象的值,在验证不同对象的值是否相等时, 不会缺失精准度
Scanner进阶应用:Scanner也支持更多类型的数据输入
对应的方法就是在nxet和()之间加入更多的类型,以检测输入数据的类型
基本语法:
Scanner scanner = new Scanner(System.in);
if(scanner.hasNext()){//监测是否有下一个数据输入
String str = scanner.next();//储存输入的数据
}
if(scanner.hasNextInt()){//监测是否有下一个整型数据输入
String str = scanner.nextInt();//储存输入的整型数据
}
if(scanner.hasNextFloat()){//监测是否有下一个浮点类型数据输入
String str = scanner.nextFloat();//储存输入的浮点类型数据
}
if(scanner.hasNextByte()){//监测是否有下一个字节类型数据输入
String str = scanner.nextByte();//储存输入的字节类型数据
}
if(scanner.hasNextBoolean()){//监测是否有下一个布尔类型数据输入
String str = scanner.nextInt();//储存输入的布尔类型数据
}
基本类型和引用数据类型都有对应的方法监测这里只浅浅的举几个简单的例子
实例:
public static void main(String[] args) {
Scanner s = new Scanner(System.in);//实例化Scanner对象----将Scanner加载到内存中
while(true){//死循环,不不退出循环的话会一直循环
System.out.println("请输入整数:");//向控制台输出提示语
if (s.hasNextInt()){//检测是否有下一个整数类型的数据输入
int i = s.nextInt();//使用整形变量i来存储接收到的整数数据
System.out.println("输入的整数数值为:" + i);//向控制台输出接收到的整数数据
}else if(s.hasNextFloat()){//当上一个判断不成立时转入此判断--检测是否有下一个浮点数类型的数据输入
System.out.println("检测到输入数据不是整数,转入浮点数判断:");//向控制台输出提示语
float f = s.nextFloat();//使用浮点数类型变量f来储存接收到的浮点数数据
System.out.println("输入的浮点数数值为:" + f);//向控制台输出接收到的浮点数数据
}else if(s.hasNext()){//检测是否有下一个输入
String str = s.next();//使用字符串变量str来储存接收到的字符串数据
if (str.equals("退出")){//判断接收到的字符串是否是"退出"
break;//退出循环
}else{//当接收到的数据不是"退出"时执行括号内的代码
System.out.println("无效数据!");//向控制台输出提示语
}
}
}
s.close();//关闭Scanner占用的io流
}
效果演示图:
nextInt()和nextFloat()方法和next()方法类似, 对空格不敏感(不输出空格),中间有空格的会换行且分次输出
亿个小作业:输入多个数字求其总和与平均数
每输入一个数字用回车确认
通过输入非数字来结束输入 并输出执行结果
参考答案:(仅供参考,希望大家能独立完成)
public static void main(String[] args) {
Scanner s = new Scanner(System.in);//实例化Scanner对象----将Scanner加载到内存中
double d = 0.0;//定义双精度浮点数类型变量d用来储存所有数字想加的和
int i = 1;//定义整形类型变量i来确定是第几个数字
System.out.println("输入多个数字我将给他们求和与平均数:");//向控制台输出提示语
while(true){//死循环,不不退出循环的话会一直循环
System.out.println("请输入第" + i + "个数字");//向控制台输出提示语----加上变量i能准确显示当前输入的是几个数字
if(s.hasNextDouble()){//检测是否有下一个双精度浮点数类型数据输入
i++;//当有数据输入时i自增一次
d += s.nextDouble();//当有数据输入时d = d和新输入的数字的和
}else{//如果输入的不是数字则执行下列代码
System.out.println("和为: " + d + "n平均数为:" + (d / --i));//输出总数d,n(反斜杠在回车上面)是换行符,输出平均数( d 除以 i自减(从1开始,所以减1就是输入数字的个数),因为没给--i加括号,所以--需要写在前面,否则计算时i的值是未自减前的值 )
break;//执行完毕退出循环
}
}
s.close();//关闭Scanner占用的io流
}
效果演示图:



