Java 扫描仪合并行

Java Scanner merging lines

我正在尝试使用 for 循环请求 3 条用户输入,然后用于创建 class 的新实例。它适用于第一个循环,但第二个循环我在控制台上收到此提示,它需要一个整数输入。

Enter the employee's name: adam
Enter their hours worked: 1
Enter the employee's pay rate: 1
Enter the employee's name: Enter their hours worked: 

输入数据的代码如下所示:

for (int i = 0; i < 5; i++) {
            System.out.print("Enter the employee's name: ");
            String employeeName = input.nextLine();
            System.out.print("Enter their hours worked: ");
            int hoursWorked = input.nextInt();
            System.out.print("Enter the employee's pay rate: ");
            double payRate = input.nextDouble();
            employee[i] = new Payroll(employeeName, hoursWorked, payRate);

我在该站点上看到其他问题,建议我使用 input.next() 而不是 input.nextLine(),但该解决方案也不起作用。如何让输入线按照应有的方式分开?

问题出在这里:

 double payRate = input.nextDouble();

对于 nextDouble,扫描器在完成读取 double 值时停止,跳过该行的其余部分,包括 \n.

第二次调用 nextLine() 时,它只是读取您之前输入的双输入的结尾,然后继续“输入他们的工作时间”,在第一次迭代后将 employeeName 设置为空。

事实上,只有当您输入由以下员工姓名分隔的费率值时,您的代码才能正常工作,如下所示(丑陋):

  Enter the employee's pay rate: 3559 James

使扫描器在循环结束时强制读取“双”行的结尾:

for (int i = 0; i < 5; i++) 
{
    System.out.print("Enter the employee's name: ");
    String employeeName = input.nextLine();
    System.out.print("Enter their hours worked: ");
    int hoursWorked = input.nextInt();
    System.out.print("Enter the employee's pay rate: ");
    double payRate = input.nextDouble();
    employee[i] = new Payroll(employeeName, hoursWorked, payRate);
      
    //this
    if (i<4)
      input.nextLine();
}