Java System.out.println重复自身
有谁能告诉我正确的方向,为什么当我使用for循环时,println函数在输出中出现两次。谢谢Java System.out.println重复自身,java,eclipse,Java,Eclipse,有谁能告诉我正确的方向,为什么当我使用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();
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();
}
}
第一次输入后,换行符似乎仍保留在输入中。当请求下一个输入时,扫描仪会看到一个换行符,并将其解释为输入的结束。这使得它似乎跳过了其他每一个输入请求。我建议查看Java API文档,了解
Scanner
方法的确切行为。问题是,当您使用新行输入1
时,nextInt()
函数不会删除您在1中输入的新行。将调用更改为scan.nextInt()
到Integer.parseInt(scan.nextLine())
,它的行为应该符合您的要求
进一步解释;下面是来自JavaAPI的内容
扫描仪使用分隔符模式将其输入拆分为标记,
默认情况下与空白匹配。由此产生的代币可以是
使用不同的next转换为不同类型的值
方法
及
next()和hasNext()方法及其原语类型伴侣
方法(如nextInt()和hasNextInt())首先跳过
匹配分隔符模式,然后尝试返回下一个
代币hasNext和next方法都可能阻止等待进一步的操作
输入
因此,显然发生了什么(我没有在页面上看到任何东西来确认它)是在
next()
,hasNext()
,以及它们的相关方法读入令牌之后,它们立即返回它,而不在它后面占用分隔符(在我们的例子中是空格)。因此,在读入1后,换行符仍然存在,因此下面对nextLine()
的调用有一个换行符要gobble并执行了。或者,您可以向scan.nextLine()
添加额外的调用,或者找到更优雅的方法来忽略换行符。就我个人而言,我尽量不交错nextLine()
使用类似于nextInt()
的东西,因为这样我就不得不担心扫描仪将在哪里读取下一个标记。因为我们希望每行只需要一件事,所以一次读取/解析一整行就容易多了。这一点很好。我只是想给你一些选择。我没有看过API,但是你可能会认为开发人员/设计人员会添加一种方便的方法,在这种情况下清除无关字符,尤其是空格;我将用其中的内容更新答案,以进一步解释发生了什么。这已经被问了很多次了。见:
Enter the number of employees to calculate:
1
Enter First Name:
Enter Last Name:
daniel
Enter Document #: