如何用Java中的“Scanner.hasNext”完成程序
我想知道如何用“java扫描器”完成这个程序
特别是当我将它与System.in
和scanner.hasNext()
一起使用时
Scanner sc = new Scanner(System.in);
例如,当我在某个IDE上运行下面的代码时
public static void main(String[] args){
Scanner sc = new Scanner(System.in)
int[] arr = new int[3];
int i = 0;
// put all the number from scanner to the array.
while(sc.hasNext()){
arr[i++] = sc.nextInt();
}
System.out.println(Arrays.toString(arr));
并在控制台中输入一些数字(用于扫描仪的输入), 它不会停止接收数字
我想使用sc.hasNext()
,以便在完成为用户获取一些输入后,将收到的所有数字放在一起,就像我对代码的注释一样
如何完成扫描仪在控制台上获取输入
# 1 楼答案
Scanner
将继续读取,直到找到“文件结束”条件当您从stdin读取数据时,如果您使用<;样式重定向
但是,要将用户的输入放入数组中,可以通过以下方法替换
while
条件:# 2 楼答案
您不需要为hasNext设置条件,因为输入输入后它将始终返回true
您应该对数组长度有一个条件
试试这个
# 3 楼答案
由于将用户的输入存储在固定大小(4)的结构中,因此可以使用
for
循环,毕竟,使用它是正确的:
# 4 楼答案
代码将在
stdin
(System.in
在Java中)打开时运行。如果需要,您可以通过编程方式将其关闭,但通常是通过按Ctrl+d 在程序正在运行的终端中(快捷方式是Windows控制台中的Linux/macOS,我想是Ctrl+z)# 5 楼答案
只需在while中添加一个条件,将数组限制为特定长度,这样当它达到此长度时,t将无法接受更多输入,它将关闭循环并打印数组 像这样:
# 6 楼答案
您可以更改while循环,并在整数数达到数组长度时设置条件分隔符。试试这个
或者你可以把它写成一个简单的for循环
这里有助于您了解sc.nextInt()的工作原理
每当执行sc.nextInt()时,scanner objects sc都会查找一个整数,并返回在sc object扫描的流中找到的下一个整数。如果在流中找不到整数,它将抛出一些异常
现在来看代码,当执行while循环时,每次代码进入while循环时,它调用sc.nextInt(),读取一个整数并将其分配到数组中,但由于您已将数组大小声明为3,因此只需中断循环,否则它将尝试访问数组中大于3的索引,并将导致您不希望出现的ArrayIndexOutOfBounds异常。因此,我将该条件放入while循环中,当索引达到3时,它就会中断。在for循环中也实现了类似的功能。希望我的解释有帮助。如果您还有任何疑问,请告诉我
您可以做的另一件事是,将while循环中的sc.hasNext()更改为sc.hasNextInt(),因为hasNext()从流中捕获任何数据(整数或非整数)并返回true,如果下一个传入数据不是整数,则您不希望它返回true,否则将发生异常
一旦在while循环条件下将sc.hasNext()更改为sc.hasNextInt(),一旦向程序提供3个整数作为输入,程序将自动结束,但如果用户尝试输入3个以上的整数,它将运行ArrayIndexOutOfBounds异常,因为数组长度仅限于3。因此,如果(i==arr.length){break;}你的while循环也可以是这样的