我有这个程序和一些关于扫描仪类的。next(),。nextint(),。hasnext()和。hasnextint()如何工作的问题。提前感谢你的任何帮助:)
import java.util.Scanner;
public class test {
public static void main (String[] args) {
Scanner console = new Scanner(System.in);
int age;
System.out.print("Please enter your age: ");
while (!console.hasNextInt()) {
System.out.print("Please re-enter your age: ");
console.next();
}
age = console.nextInt();
System.out.println("Your age is "+age);
}
}
1/当!console.hasNextInt()第一次执行时,为什么它要求输入?
我认为首先控制台是空的,所以!console. hasnextint ()是True(空不是int),然后它应该直接从"请输入您的年龄:"到"请重新输入您的年龄:"但我的想法似乎是错误的。
在这里,用户需要在"Please re-enter your age:"打印之前输入一些东西。console.next()的数据类型总是一个字符串(我尝试使int s = console.next();,它给出了一个错误),那么为什么这不是一个无限循环?
例如,当涉及到console.next();时,我输入21。为什么age有21的值?我认为由于console.hasNextInt(),我需要输入另一个数字,这个新数字将是age的值。java.util.Scanner.hasNextInt()方法返回true中的Token可以解释为int值使用nextInt()方法获取默认基数。
当您以非整数输入开始时,hasNextInt()将为false,并且您将进入while循环。然后它会提示你重新输入你的年龄。但是如果你从整数开始,你就不会进入循环。你的年龄会被打印出来。
console.next()
表示它接受下一个输入令牌并返回String。如果你把代码写成:
String s = null;
while (!console.hasNextInt()) {
s = console.next();
System.out.println("You entered an invalid input: " + s);
System.out.print("Please re-enter your age: ");
}
console.next()
用于处理非整数输入。现在,如果您输入一个非整数的twenty
,您将看到console.hasNextInt()
将为假,console.next()
将读取它。
hasNextInt()
等待输入字符串,然后告诉您是否可以转换为int
。考虑到这一点,让我们讨论一下你的问题:
当
!console.hasNextInt()
第一次执行时,为什么它要求输入?
因为它会阻塞,直到有来自控制台的输入。
console.next()
的数据类型总是一个字符串(我试图使int s = console.next();
,它给出了一个错误),那么为什么这不是一个无限循环?
因为当输入可以转换为int
(例如"21"
)时,hasNextInt()
返回true。
以
console.next();
为例,我输入21
。为什么age
有21
的值?我想因为console.hasNextInt()
的原因,我需要输入另一个数字,这个新数字将是age
的值。
调用next()
不等待新的输入,它只是吞下由hasNextInt()
测试的输入,以便扫描仪可以移动到下一个。它可以是循环中的第一条语句,效果相同。