关于Scanner类的hasNext()方法
请先看如下代码获取键盘输入的一个int数字:int num = sc.nextInt();即使用空格分开,输入多个,也只能获取第一个获取键盘输入的一个字符串:String str = sc.next();其实键盘输入的任何东西都是当作字符串处理的,如果这个字符串经过转化后,符合你要求的类型(比如int类型),就正常获取这个值,如果不能转化就报异常...
请先看如下代码
import java.util.*;
public class Test {
public static void main(String[] args) {
System.out.println("请输入若干字符串,以空格分隔");
Scanner sc = new Scanner(System.in);
while(sc.hasNext()) {
System.out.println("你输入的是:" + sc.next());
}
System.out.println("程序结束了");
}
}
程序运行之后,当我们输入字符串,回车之后,发现程序并没有输出 “程序结束了”
如果你此时再继续输入,你会发现程序还可以接收你的输入,并且仍然没有输出 “程序结束了”
这是因为当执行到 hasNext() 时,如果判断为空,程序并不会返回 false,而是将方法阻塞,等待你继续输入内容
如何解决这个问题?
使用 hasNext() 的重载方法
import java.util.*;
public class Test {
public static void main(String[] args) {
System.out.println("请输入若干字符串,以空格分隔");
Scanner sc = new Scanner(System.in);
// 输入时如果匹配到 # 则返回 true,然后取非
while(!sc.hasNext("#")) {
System.out.println("你输入的是:" + sc.next());
}
System.out.println("程序结束了");
}
}

除此之外,也可以使用快捷键手动结束程序
- Windows系统:Ctrl +Z
- macOS:⌘ + D
实测其它以 has 开头的方法也具有此特性
获取键盘输入的一个 int 数字:
int num = sc.nextInt();
即使用空格分开,输入多个,也只能获取第一个
获取键盘输入的一个字符串:
String str = sc.next();
Scanner 类的以 has 开头的方法,都是作判断用的,返回值类型是 boolean,而不是用于获取值的
其实键盘输入的任何东西都是当作字符串处理的,如果这个字符串可以转化为符合你要求的类型(比如int类型),就正常获取这个值,如果不能转化就报异常
昇腾计算产业是基于昇腾系列(HUAWEI Ascend)处理器和基础软件构建的全栈 AI计算基础设施、行业应用及服务,https://devpress.csdn.net/organization/setting/general/146749包括昇腾系列处理器、系列硬件、CANN、AI计算框架、应用使能、开发工具链、管理运维工具、行业应用及服务等全产业链
更多推荐


所有评论(0)