0

私はCS1を使用するJavaに比較的慣れていません。私たちはScanner数週間sを使用してきましたが、私は通常の状況でそれらに満足しています。とはいえ、理解できないところに行き着き、調査で答えを得ることができませんでした。

クラス用に作成しているPayRollプログラムがあります。与えられた3つのクラス変数を使用します。

  • employeeLastName
  • hoursWorkded
  • payRate

3つの個別のセッターメソッドと、3つすべてを設定する1つのセッターを作成しました(4つのメソッドすべてでスキャナーを使用)。

スキャナーを使用しemployeeLastNameて独自のセッターを取得するのに問題はありませんが、3つを取得するメソッドで実行すると、名前をスキャンする代わりに、プロンプトが出力され、hoursWorked入力にスキップします。そこに入力した内容に誤りはないと思います。

この時点での私の最大の質問は、2つの異なるスキャナー/ヘルパーメソッドを使用してセッターを実行することさえ可能かどうか、または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;
4

1 に答える 1

0

You shouldn't need to create methods for asking the user the input. Just create a main class with one scanner object (keep it simple) and gather all the data like this:

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

and then, once you have all the data, pass it to your setters:

    employeePayRoll2.setPayRoll(empLastName, hoursWorked, payRate);
于 2013-03-04T03:45:30.703 に答える