簡體   English   中英

如何在Java的setter方法中執行計算?

[英]How do i perform a calculation within a setter method in java?

我在Java項目中有兩個類,一個是Employee1類,另一個是info類。 在Employee 1類中,我有以下代碼:

public class Employee1 {
    String employeeName;
    int hoursWorked;
    double rateOfPay;
    double wages;




public Employee1(String name, int hours, double pay) {
    employeeName=name;
    hoursWorked=hours;
    rateOfPay=pay;

}


public String getName() {
    return employeeName;
}

public void setName(String xName) {
    employeeName = xName;
}


public double getHours() {
    return hoursWorked;
}


public void setHours(int xHours) {
    hoursWorked = xHours;
}


public double getPay() {
    return rateOfPay;
}


public void setPay(double xPay) {
    rateOfPay = xPay;
}

public double calculateWages  () {
wages= hoursWorked * rateOfPay; 
return wages;
} 

public void print() {

    System.out.println("name:"+ employeeName);
    System.out.println("hours " + hoursWorked);
    System.out.println("Wages Earned"+  wages);
}
}

在我的信息類中,我有以下代碼:

public class Info {

    public static void main(String[] args) {
        Employee1 x= new Employee1("Sarah",40,7.25);
        Employee1 y=new Employee1("Bob",30,8.00);
        Employee1 z= new Employee1("Todd",26, 8.25);



x.print();  


    }

}       

我現在的問題是,我正在嘗試為Employee1類中的工資創建一個計算,就像您通過calculateWages方法可以看到的那樣。 但是,每當我調用現有員工的打印方法x時,工資總是顯示為0.0,而且我不確定為什么會這樣。 我為每個Employee1對象都有一個預先存在的變量,但我仍然獲得所有工資的0.0值,但其余信息正確打印。 誰能幫我解決這個問題? 謝謝!

您提供的代碼中沒有setter方法,而是有一個getter方法。 是的,您可以使用getter和setter進行計算。

public void setAmount(int amount){
  this.amount = quantity * price;  
} 

public void getAmount(){
  return this.amount + otherProperty;  
} 

讓我們以此開始:

我是編程的新手,但是我知道這種方法被稱為setter。

不,不是。

在OO中,代碼(大部分)由類組成,這些類由狀態(字段)和(通常)對該狀態進行操作的方法組成。

按照慣例 ...

  • 設置器是一種將字段設置為作為方法參數提供的新值的方法。
  • getter是一種返回字段值的方法。

您的方法既不是setter也不是(純)getter:

  • 它不是設置器,因為它不會將wages設置為提供的值。 (它基於先前提供的值進行計算。)

  • 您可以將其視為“ wages字段的獲取者,但它“不純凈”,因為它會更新該字段並返回其值。


每次我打印“ wages”變量時,它只會給我零,除此之外,我在主變量中定義了其他變量hoursWorked&rateOfPay

如果不看其余的代碼,我們將無法解釋。 但是,我懷疑問題是以下之一:

  1. hoursWorkedrateOfPay均為零...,因為它們未正確設置/初始化為非零值。

  2. 沒有調用calculateWages方法。

  3. 您有定義該方法的類的多個實例...並且您的代碼正在尋找錯誤的實例。

  4. 可能...某些涉及的變量被錯誤地聲明為static .s


更新 -現在我看到了您的代碼, wages為零的原因是您的代碼未調用calculateWages

在OOP的最佳實踐中,您的方法應有兩個參數:例如

public class Answer1 {

    public static double calculateWages  (int hoursWorked, double rateOfPay){
        return hoursWorked * rateOfPay;
    }

    public static void main(String[] args) {

        System.out.println(calculateWages(6, 5.24));

    }

}

您可以將這些值傳遞給calculateWages()方法。 嘗試這個

public double calculateWages  (int hoursWorked, double rateOfPay) {
     return hoursWorked * rateOfPay;
}

您可能想通過在main類之外使用main方法創建一個類來簡化此工作,以完成工資的這一特定工作。 我們在編程中將此稱為“隔離”,我們想將一個類與另一個類隔離,並確保每個類僅執行一項特定的工作。 這是一個將獲得總工資的類的示例:

public class WagesCalc {

      public static double calculateWages(int hoursWorked, double hourlyWage) {
            double wage = (double)hoursWorked * hourlyWage;
            return wage;
            }

}

在上面的代碼中,我們可以創建一個稱為WagesCalc的類來計算工資。 在其中,我們可以創建一種稱為計算工資的方法。 您可以添加工作時間和小時工資作為課程的參數。 然后,我們添加一個變量,然后返回工資。 我們將此方法設為靜態,以便可以在不創建類實例的情況下將其返回。 這是main方法中的代碼:

公共類應用{

       public static void main( String[] args )throws IOException{

            double wages = WagesCalc.calculateWages(23, 23.50);
            System.out.println("My total wage is $" + wages);


      }
}

這是輸出:

My total wage is $540.5

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM