有人会指出我正确的方向,为什么当我使用for循环时,println函数在输出中出现两次。感谢
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("Enter the number of employees to calculate:");
int numberEmployees = scan.nextInt();
for(int i=0; i<numberEmployees; i++){
System.out.println("Enter First Name:");
name = scan.nextLine();
System.out.println("Enter Last Name:");
last = scan.nextLine();
System.out.println("Enter Document #:");
document = scan.nextInt();
System.out.println("Enter Basic Salary");
basicSalary = scan.nextInt();
System.out.println("Enter # of Hours");
hours = scan.nextInt();
}
}
输出
Enter the number of employees to calculate:
1
Enter First Name:
Enter Last Name:
daniel
Enter Document #:
答案 0 :(得分:3)
问题在于,当您使用新行输入1
时,nextInt()
功能不会删除您输入的换行符.1。将您的来电更改为{{1} } scan.nextInt()
它应该按照你想要的方式行事。
进一步解释;这是来自Java API的东西。
扫描仪使用分隔符模式将其输入分解为标记, 默认情况下匹配空格。然后可以得到所产生的令牌 使用各种下一个转换为不同类型的值 方法
和
next()和hasNext()方法及其原始类型的伴侣 方法(如nextInt()和hasNextInt())首先跳过任何输入 匹配分隔符模式,然后尝试返回下一个 令牌。 hasNext和next方法都可能阻止等待进一步 输入
所以,显而易见的事情(我在页面上没有看到任何确认信息)是Integer.parseInt(scan.nextLine())
,next()
及其相关方法在令牌中读取后立即返回没有在它之后吞噬分隔符(在我们的例子中,空格)。因此,在读完你的1之后,新行仍然存在,因此以下对hasNext()
的调用有一个新行来吞并并且这样做。
答案 1 :(得分:0)
在第一次输入后,换行符似乎仍保留在输入中。当请求下一个输入时,扫描器会看到换行符并将其解释为输入的结尾。这使得它似乎跳过每个其他输入请求。我建议查看Java API文档,了解Scanner
方法的确切行为。