【问题标题】:Scanner Help - Using 2 scanner methods with single getter method扫描仪帮助 - 使用 2 种扫描仪方法和单个 getter 方法
【发布时间】:2013-03-04 03:27:05
【问题描述】:

我对学习 CS1 的 Java 比较陌生。我们已经使用Scanners 几个星期了,在典型情况下我对它们非常满意。我遇到了一个我无法弄清楚的地方,也无法通过研究获得答案。

我正在为课堂构建一个薪资计划。我们将使用给定的三个类变量:

  • employeeLastName,
  • hoursWorkded,
  • payRate。

我制作了 3 个单独的 setter 方法以及一个设置所有这三种方法的 setter(使用带有所有四种方法的扫描仪)。

我使用扫描仪在自己的设置器中获取employeeLastName 没有问题,但是当我使用获取三个的方法时,它不是扫描名称,而是打印提示并跳到@987654326 @ 输入。我认为我在那里输入的内容没有任何错误。

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

    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;

【问题讨论】:

    标签: java java.util.scanner


    【解决方案1】:

    您不需要创建方法来询问用户输入。只需使用一个扫描仪对象创建一个主类(保持简单)并像这样收集所有数据:

    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);
    

    【讨论】:

    • 不幸的是,虽然我们有 2 个类(1 个计算对象,另一个是测试者)。如果允许我这样做,我会这样做,但我们不应该这样做。我们的教授指示我们使用我们的主要方法做的只是实例化测试对象。由于变量是私有的,尽管我无法使用其他类的扫描仪直接更改它们的值。谢谢,尽管这对这个不起作用,但在大多数情况下它仍然是一个很好的解决方案。我很欣赏它的这一方面。
    • 那么在测试仪中,这些方法的参数是给定的还是您添加了扫描仪?我认为传递扫描仪对象时可能会出现问题。尝试在每个方法的主体中实例化扫描仪。
    • 是的,它是用另一种方法实例化的。我会尝试翻转它,看看它是否有所作为。
    • 没关系,如果它们只是其他方法的本地方法,原始方法无法找到它并且会出错。
    • 我也应该早先指定(只是注意到了这一点)当我粘贴它看起来块注释下的东西在那个方法中它实际上是在测试类的测试方法中,而不是在那些测试类中的扫描仪/辅助方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-20
    相关资源
    最近更新 更多