Java 扫描仪帮助-使用2种扫描仪方法和单getter方法

Java 扫描仪帮助-使用2种扫描仪方法和单getter方法,java,java.util.scanner,Java,Java.util.scanner,我对学习CS1的Java比较陌生。我们已经使用扫描仪s几个星期了,在典型情况下,我对它们非常满意。我遇到了一个我无法理解的问题,也无法通过研究得到答案 我有一个为班级准备的工资单项目。我们将使用给定的三个类变量: employeeLastName 工作小时数 payRate 我创建了3个单独的setter方法,以及一个设置所有三个方法的setter(使用扫描器和所有四个方法) 我使用扫描器在自己的setter中获取employeeLastName没有问题,但是当我使用获取三个名称的方法进行扫

我对学习CS1的Java比较陌生。我们已经使用
扫描仪
s几个星期了,在典型情况下,我对它们非常满意。我遇到了一个我无法理解的问题,也无法通过研究得到答案

我有一个为班级准备的工资单项目。我们将使用给定的三个类变量:

  • employeeLastName
  • 工作小时数
  • payRate
我创建了3个单独的setter方法,以及一个设置所有三个方法的setter(使用扫描器和所有四个方法)

我使用扫描器在自己的setter中获取
employeeLastName
没有问题,但是当我使用获取三个名称的方法进行扫描器时,它只打印提示并跳转到
hoursWorked
输入。我认为我在那里键入的内容没有任何错误

在这一点上,我最大的问题是,是否可以使用两种不同的scanner/helper方法来执行setter,或者
nextLine()
与其他scanner实用程序结合使用时是否会表现得很有趣。以下是与此相关的重要代码摘录。如果还需要什么,请告诉我。提前感谢您的帮助

    private double requestDoubleFromUser( Scanner sc , String prompt )
{

    double userInput;

    System.out.print( prompt );
    userInput = sc.nextDouble();

    return userInput;

}

private String requestNameFromUser( Scanner sc , String prompt )
{

    String nameInput;

    System.out.print( prompt );
    nameInput = sc.nextLine();

    return nameInput;

        /***** Test of Employee 2 *****/

    displayEmployeeData( "\n Default Pay Period Info for Employee 2", employeePayRoll2 );
    System.out.println( "\n Please complete the employee's information to receive a period summary. " );
    employeePayRoll2.setPayRoll( requestNameFromUser( sc, "\n Employee Name: " ) ,
                                 requestDoubleFromUser( sc, "\n  Hours Worked: " ) ,
                                 requestDoubleFromUser( sc, "   Rate of Pay: " ) );
    displayEmployeeData( "\n Pay Period Data for Employee 2", employeePayRoll2 );
那是不起作用的部分。以下是设定者:

    public void setEmployeeLastName( String employeeLastName )
{
    this.employeeLastName = employeeLastName;
}

public void setHoursWorked( double hoursWorked )
{
    this.hoursWorked = hoursWorked;
}

public void setPayRate( double payRate )
{
    this.payRate = payRate;
}

public void setPay( double hoursWorked , double payRate )
{
    this.hoursWorked = hoursWorked;
    this.payRate = payRate;
}

public void setPayRoll( String employeeLastName , double hoursWorked , double payRate )
{
    this.employeeLastName = employeeLastName;
    this.hoursWorked = hoursWorked;
    this.payRate = payRate;

您不需要创建询问用户输入的方法。只需创建一个带有一个scanner对象的主类(保持简单),然后像这样收集所有数据:

Scanner sc = new Scanner(System.in);
double hoursWorked, payRate;
String empLastName;

System.out.println(prompt); //enter name
empLastName = sc.nextLine();

System.out.println(prompt); //enter hrs worked
hoursWorked = sc.nextDouble();

System.out.println(prompt();//enter payRate
payRate = sc.nextDouble();
然后,在获得所有数据后,将其传递给设置者:

    employeePayRoll2.setPayRoll(empLastName, hoursWorked, payRate);

不幸的是,尽管我们有两个类(一个是计算对象,另一个是测试人员)。如果允许我这样做,我会这样做,但我们不应该这样做。教授指示我们对主要方法所做的就是实例化测试对象。因为变量是私有的,尽管我不能直接用另一个类的扫描器更改它们的值。谢谢,尽管这不起作用,但在大多数情况下,这仍然是一个很好的解决方案。我很欣赏这一点。那么在测试仪中,这些方法的参数是给定的还是添加了扫描仪?我想当通过扫描器对象时可能会有问题。尝试在每个方法体中实例化扫描仪。是的,它是在另一个方法中实例化的。我将尝试翻转它,看看它是否有区别。如果它们只是原始方法无法找到的其他方法的本地方法,则无论如何,这不会起作用,并且会出错。我也应该早一点指定(刚刚注意到这一点)当我粘贴时,块注释下的内容似乎在该方法中,它实际上在测试类中的测试方法中,而不是在测试类中的scanner/helper方法中。