2017-10-03 17 views
-1

私は、有料スタブを作成するという目標に問題を作りました。このプログラムは、 "$ 0.00"というだけでなく、通常の賃金の出力を生成しません。問題を理解することはできません。期待Java出力のエラー

: "正規営業時間:40レッグレート:$ 15.50レッグペイ: $ 620.00一室"
私のコード: "正規営業時間:40レッグレート:$ 15.50レッグ ペイ:$ 0.00"

Iそれを再フォーマットしようとしましたが、まだこのエラーが発生しています。

public class Activity2PayStub { 

    public static final double OVERTIME_FACTOR = 1.5; 
    public static final double FEDERAL_FACTOR = 0.2; 
    public static final double SOCIAL_FACTOR = 0.1; 

    private String employeeName; 
    private String employeeSSN; 
    private int regularH; 
    private int overtimeH; 
    private double payrateH; 
    private double regularPay = (regularH * payrateH); 
    private double overtimePR = payrateH * (OVERTIME_FACTOR); 
    private double overtimePay = overtimePR * overtimeH; 
    private double grossPay = regularPay + overtimePay; 
    private double ssTax = grossPay * (SOCIAL_FACTOR); 
    private double federalTax = (grossPay - ssTax) * (FEDERAL_FACTOR); 
    private double netPay = grossPay - (federalTax + ssTax); 

    public static void main(String[] args) { 
     Scanner keyboard = new Scanner(System.in); 
     Activity2PayStub a2ps = new Activity2PayStub(); 

     a2ps.getInput(keyboard); 
     a2ps.calculate(); 
     a2ps.printPayStub(); 
    } 

    /** @param keyboard command-line arguments. */ 
    public void getInput(Scanner keyboard) { 
     System.out.print("Enter employee name: "); 
     employeeName = keyboard.nextLine(); 
     System.out.print("Enter employee SNN (incl. hyphens: "); 
     employeeSSN = keyboard.nextLine(); 
     System.out.print("Enter number of regular hours worked: "); 
     regularH = keyboard.nextInt(); 
     System.out.print("Enter number of overtime hours worked: "); 
     overtimeH = keyboard.nextInt(); 
     System.out.print("Enter hourly pay rate : "); 
     payrateH = keyboard.nextDouble(); 
    } 

    public void calculate() { 
    } 

    /** simply prints. */ 
    public void printPayStub() { 
     Scanner input = new Scanner(System.in); 

     System.out.println("_______________________" 
      + "_____________________________________________"); 

     String format = "Name: %-37s SSN: %-11s\n"; 
     System.out.printf(format, employeeName, employeeSSN); 

     format = "Regular Hours: %-8d Reg Rate: $%-8.2f Reg Pay: $%-8.2f\n"; 
     System.out.printf(format, regularH, payrateH, regularPay); 

     format = "Overtime Hours: %-8dOT Rate: $%-8.2f OT Pay: $%-8.2f\n"; 
     System.out.printf(format, overtimeH, overtimePR, overtimePay); 

     format = "Gross Pay: $%-8.2f\n"; 
     System.out.printf(format, grossPay); 

     format = "SS Withholding: $%-8.2f\n"; 
     System.out.printf(format, ssTax); 

     format = "Federal Tax: $%-8.2f\n"; 
     System.out.printf(format, federalTax); 

     format = "Net Pay: $%-8.2f\n"; 
     System.out.printf(format, netPay); 

     System.out.println("________________________" 
     + "__________________________________________"); 
    } 
} 

答えて

7

これは、計算がインスタンス作成時に実行されるためです。計算をcalculate()メソッドに移す必要があります。宣言は、インスタンス変数(すなわち静的でないフィールドである)、変数初期化子が評価されるためのものであり、割り当ては、各時間インスタンスを実行した場合

JLS chapter 8.3.2この確認しますクラスが作成されます

+0

ありがとう!私はそれを試して、私はまだ同じエラーが表示されます。 – Lynn

+0

@Lynn次に、質問を更新して、実装の正確性を示してください。 –

+1

あなたがしたことは、インスタンス変数と同じ名前のローカル変数を宣言することでした。インスタンス変数を参照する必要があります。ステートメントのデータ型部分を削除すると、それが機能します。基本のいくつかを忘れているように見えるので、[クラスとオブジェクト](https://docs.oracle.com/javase/tutorial/java/javaOO/index.html)を読むことをお勧めします。 –