2016-02-28 40 views
0

輸出運行:Java的工資會繼續展示,0.00淨工資

Payroll Computation 

Enter number of hours worked (00.0) <0 for Quick exit>: 39 

Enter first number of hours straight (integer or 0 to disable):40 

Enter hourly rate of worker (00.00): 10 

Gross pay is : $390.00 
Tax is  : 7% 
Net pay is : $0.00 

淨工資應該是362.70

所以實際輸出應該像下面:

Gross pay is : $390.00 
Tax is  : 7% 
Net pay is : $362.70 

我在這裏想念什麼細節? 這是我在代碼中做錯了什麼,還是別的什麼? 需要你的幫助/援助,以獲得淨產的價值

import java.io.*; 
import java.util.*; 
import java.text.NumberFormat; 
import java.math.*; 
import java.util.Locale; 
class Assign2 
{ 
    public static void main(String args[]) 
    { 
      CalPayroll cpr=new CalPayroll(); 
      cpr.acceptPay(); 

    } 
} 

CallPayroll

class CalPayroll extends Pay 
{ 
    Screen sc=new Screen(); 
    Scanner stdin=new Scanner(System.in); 
    NumberFormat dollars=NumberFormat.getCurrencyInstance(Locale.US); 
    Pay p=new Payroll(); 
    public void displayinfo() 
    { 
      double _gross=super.calc_payroll(); 
      super.tax(_gross); 
      double _net= p.calc_payroll(); 
      System.out.println("Gross pay is : "+dollars.format(_gross)); 
      System.out.println("Tax is  : "+taxrate+"%"); 
      System.out.println("Net pay is : "+dollars.format(_net)); 

    } 
    public void acceptPay() 
    { 
      Accept ac = new Accept(); 
      CalPayroll cp=new CalPayroll(); 
      float h,r; 
      int hs; 
      char s; 
      do 
      {  
       System.out.println("Payroll Computation"); 
       System.out.println(" "); 
       System.out.println("Enter number of hours worked (00.0) <0 for Quick exit>: "); 
       h=stdin.nextFloat(); 
       cp.setHours(h); 
       if(h>0) 
       { 
         System.out.println("Enter first number of hours straight (integer or 0 to disable):"); 
         hs=stdin.nextInt(); 
         System.out.println("Enter hourly rate of worker (00.00): "); 
         r=stdin.nextFloat(); 
         sc.scrollscreen('=',65,2); 
         cp.setHrsStr(hs); 
         cp.setRate(r); 

         sc.scrollscreen(1); 
         cp.displayinfo(); 
         sc.scrollscreen(1); 

         System.out.println("e to exit, any other letter + <Enter> to continue"); 
         s=stdin.next().charAt(0); 

       } 
       else 
       { 
         System.out.println("e to exit, any other letter + <Enter> to continue"); 
         s=stdin.next().charAt(0); 
       } 

      }while(s!='e'&&s!='E'); 

    } 
} 

收費

class Pay 
{ 
    private float Hours, Rate; 
    private int HrsStr; 
    public int taxrate=0; 

    public void setHours(float a) 
    { 
      Hours=a; 
    } 
    public void setRate(float a) 
    { 
      Rate=a; 
    } 
    public void setHrsStr(int a) 
    { 
      if(a<0) 
      { 
       HrsStr=0; 
      } 
      else 
      { 
       HrsStr=a; 
      } 
    } 
    public float getHours() 
    { 
      return Hours; 
    } 
    public float getRate() 
    { 
      return Rate; 
    } 
    public int getHrsStr() 
    { 
      return HrsStr; 
    } 


    public double calc_payroll() 
    { 
      double gross; 
      gross=getHours()*getRate(); 
      return gross; 
    } 

    public void tax(double a) 
    { 
      if(a>=0&&a<=399.99) 
      taxrate=7; 
      else if(a>=400.00&&a<=899.99) 
      taxrate=11; 
      else 
      taxrate=17; 
    } 

} 
class Payroll extends Pay 
{ 
    double net; 
    double _gross; 

    public double calc_payroll() 
    { 
      _gross=super.calc_payroll(); 
      super.tax(_gross); 
      net=_gross-(_gross*taxrate/100); 
      return net; 
    } 
} 
class Screen 
{ 
    public static void scrollscreen(int a) 
    { 
      for(int i=0;i<a;i++) 
      { 
       System.out.println(" "); 
      } 
    } 
    public static void scrollscreen(char c, int a, int b) 
    { 
      for(int i=0;i<b;i++) 
      { 
       for(int j=0;j<a;j++) 
       { 
         System.out.print(c); 
       } 
       System.out.println(" "); 
      } 
    } 
} 


class Accept 
{ 
    Scanner in=new Scanner(System.in); 
    public int acceptInputInt() 
    { 
      return in.nextInt(); 
     } 

    public char acceptInputChar() 
    { 
      return in.next().charAt(0); 
    } 
    public float AcceptInputFloat() 
    { 
      return in.nextFloat(); 
    } 
    public double AcceptInputDouble() 
    { 
      return in.nextDouble(); 
    } 
} 
+0

不能告訴。沒有提供'Pay'和'Payroll'中的相關代碼。 – pczeus

+0

什麼是'CalParoll'和'Accept'? LOL – pczeus

+0

我不好,我忘了複製和粘貼現在提供的薪水和工資 –

回答

0

它失敗只是因爲你從內計算p.calc_payroll()支付cp滾動物體!該p對象沒有任何時間或利率設定,所以返回0

您希望以下來回報您的預期輸出:

public void acceptPay() 
{ 
    ... 
    cp.setHrsStr(hs); 
    cp.setRate(r); 

    sc.scrollscreen(1); 
    cp.displayinfo(); 
    ... 
} 

進一步呼籲:

class CalPayroll extends Pay 
{ 
    ... 
    Pay p=new Payroll(); 
    public void displayinfo() 
    { 
      double _gross=super.calc_payroll(); 
      super.tax(_gross); 
      double _net= p.calc_payroll(); 
      System.out.println("Gross pay is : "+dollars.format(_gross)); 
      System.out.println("Tax is  : "+taxrate+"%"); 
      System.out.println("Net pay is : "+dollars.format(_net)); 

    } 

在這裏你看到,p = new PayRoll(),但沒有設置進一步的操作來實際設置p的小時和費率。這導致_net = p.calc_payroll()的內部設置導致設置_net = 0

它應該如何工作我不確定,但這很可能是它只打印0的原因。我沒有Java編譯器可用,但我認爲以下內容可以解決您的問題:

class CalPayroll extends Pay 
{ 
    ... 
    // Pay p=new Payroll(); // Not needed... 
    public void displayinfo() 
    { 
      double _gross=super.calc_payroll(); 
      super.tax(_gross); 
      double _net= calc_payroll(); // Use local calculation 
      System.out.println("Gross pay is : "+dollars.format(_gross)); 
      System.out.println("Tax is  : "+taxrate+"%"); 
      System.out.println("Net pay is : "+dollars.format(_net)); 
    } 

此外,您可以刪除整個Payroll類和移動calc_payroll()方法爲ClPayroll類。然後它應該按預期工作。

+0

我將其更改爲calc_payroll(),但它表明工資總額 –

+0

@YoungChoi相同的值,你_may_需要使用覆蓋然後在'calc_payroll'的'CalPayroll'版本。我不如果你在'Pay'和'CalPayroll'的'calc_payroll()'中添加帶有不同文本的'System.out.println()',你會看到哪一個是叫... – holroy

+0

@YoungChoi,另外'cp'是類'CalPayroll',一個d不是'PayRoll',所以你永遠不會得到它來調用PayRoll.calc_payroll()......這可以通過將'PayRoll.calc_payroll()'移動到'CalPayroll'類中,或者使' CalPayroll'擴展'PayRoll'。無論哪種方式,您需要重新讀取與擴展和重寫方法相關的代碼,因爲您的代碼不太乾淨。 – holroy

0

你的問題是你如何覆蓋calc_payroll()Payroll延伸Pay,以及如何調用它。您正試圖從calc_payroll()方法中返回2個不同的值,_gross中的Paynet中的Payroll。您最好在該方法中執行計算,但不返回值並通過getter方法提供對_grossnet的訪問。

所以,做如下修改:

import java.io.*; 
    import java.util.Scanner; 
    import java.text.NumberFormat; 
    import java.math.*; 
    import java.util.Locale; 

    class CalPayroll extends Payroll 
    { 
     Screen sc=new Screen(); 

     NumberFormat dollars=NumberFormat.getCurrencyInstance(Locale.US); 

     Scanner stdin = new Scanner(System.in); 

     public static void main(String... args) { 
       CalPayroll cpr=new CalPayroll(); 
       cpr.acceptPay(); 

     } 

     public int acceptInputInt() { 
       return in.nextInt(); 
      } 

     public char acceptInputChar() { 
       return in.next().charAt(0); 
     } 
     public float AcceptInputFloat() { 
       return in.nextFloat(); 
     } 
     public double AcceptInputDouble() { 
       return in.nextDouble(); 
     } 

     public void displayinfo() 
     { 

       calc_payroll(); 
       double _gross = getGross(); 
       tax(_gross); 
       double _net = getNet(); 

       System.out.println("Gross pay is : "+dollars.format(_gross)); 
       System.out.println("Tax is  : "+taxrate+"%"); 
       System.out.println("Net pay is : "+dollars.format(_net)); 

     } 

     public void acceptPay() 
     { 
       CalPayroll cp=new CalPayroll(); 
       Screen sc = new Screen(); 
       float h,r; 
       int hs; 
       char s = 'a' 
       while(s!='e' && s!='E') 
       {  
        System.out.println("Payroll Computation"); 
        System.out.println(" "); 
        System.out.println("Enter number of hours worked (00.0) <0 for Quick exit>: "); 
        h=stdin.nextFloat(); 
        cp.setHours(h); 
        if(h>0) 
        { 
          System.out.println("Enter first number of hours straight (integer or 0 to disable):"); 
          hs=stdin.nextInt(); 
          System.out.println("Enter hourly rate of worker (00.00): "); 
          r=stdin.nextFloat(); 
          sc.scrollscreen('=' as char,65,2); 
          cp.setHrsStr(hs); 
          cp.setRate(r); 

          sc.scrollscreen(1); 
          cp.displayinfo(); 
          sc.scrollscreen(1); 

          System.out.println("e to exit, any other letter + <Enter> to continue"); 
          s=stdin.next().charAt(0); 

        } 
        else 
        { 
          System.out.println("e to exit, any other letter + <Enter> to continue"); 
          s=stdin.next().charAt(0); 
        } 

       } 

     } 
    } 

    class Pay 
    { 
     private float Hours, Rate; 
     private int HrsStr; 
     public int taxrate=0; 
     double gross; 


     public void setHours(float a) 
     { 
       Hours=a; 
     } 
     public void setRate(float a) 
     { 
       Rate=a; 
     } 
     public void setHrsStr(int a) 
     { 
       if(a<0) 
       { 
        HrsStr=0; 
       } 
       else 
       { 
        HrsStr=a; 
       } 
     } 
     public float getHours() 
     { 
       return Hours; 
     } 
     public float getRate() 
     { 
       return Rate; 
     } 
     public int getHrsStr() 
     { 
       return HrsStr; 
     } 

     public double getGross(){ 
      return gross; 
     } 


     public void calc_payroll() 
     { 
       gross=getHours()*getRate(); 
     } 

     public void tax(double a) 
     { 
       if(a>=0&&a<=399.99) 
       taxrate=7; 
       else if(a>=400.00&&a<=899.99) 
       taxrate=11; 
       else 
       taxrate=17; 
     } 

    } 

    class Payroll extends Pay 
    { 
     double net; 

     public void calc_payroll() 
     { 
       super.calc_payroll(); 
       super.tax(getGross()); 
       net = getGross() - (getGross() * taxrate/100); 
     } 


     public double getNet(){ 
      return net; 
     } 
    } 

    class Screen 
    { 
     public static void scrollscreen(int a) 
     { 
       for(int i=0;i<a;i++) 
       { 
        System.out.println(" "); 
       } 
     } 

     public static void scrollscreen(char c, int a, int b) 
     { 
       for(int i=0;i<b;i++) 
       { 
        for(int j=0;j<a;j++) 
        { 
          System.out.print(c); 
        } 
        System.out.println(" "); 
       } 
     } 
    } 
+0

我試過,但它只是讓出0.00的淨工資:( –

+0

然後你做錯事的價值,因爲我已經運行它,並看到正確的輸出。我已經更新了輸出到修改後的完整代碼,成功地跑了我 – pczeus

+0

是的,它的工作原理!!我沒有代碼getgross謝謝你電腦宙斯:) –