System.out.println重复自己

时间:2012-07-31 22:39:12

标签: 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();

    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 #:

2 个答案:

答案 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方法的确切行为。