如何在Java的setter方法中执行计算?

时间:2018-09-02 03:36:32

标签: 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值,但其余信息正确打印。谁能帮我解决这个问题?谢谢!

5 个答案:

答案 0 :(得分:1)

在您提供的代码中,没有setter方法,而有getter方法。是的,您可以使用getter和setter进行计算。

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

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

答案 1 :(得分:1)

让我们以此开始:

  

我是编程的新手,但是我知道这种方法被称为setter。

不,不是。

在OO中,代码(大部分)由类组成,这些类由状态(字段)和(通常)对该状态进行操作的方法组成。

按照惯例...

  • 设置器是一种将字段设置为作为方法参数提供的新值的方法。
  • getter 是一种返回字段值的方法。

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

  • 它不是设置器,因为它没有将wages设置为提供的值。 (它是根据先前提供的值进行计算的。)

  • 您可以将其视为wages字段的获取方法,但它不纯,因为它会更新该字段并返回其值。


  

每次我打印“ wages”变量时,它只会给我零,没有别的,我在主变量中定义了其他变量hoursWorked和rateOfPay

如果不看其余代码,我们将无法解释。但是,我怀疑问题是以下之一:

  1. hoursWorkedrateOfPay中的任何一个均为零...是因为未正确地设置并将其初始化为非零值。

  2. 没有调用calculateWages方法。

  3. 您有定义该方法的类的多个实例...并且您的代码正在寻找错误的实例。

  4. 可能...某些涉及的变量被错误地声明为static。s


更新-现在我看到了您的代码,wages为零的原因是您的代码未调用calculateWages

答案 2 :(得分:0)

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

    }

}

答案 3 :(得分:0)

您可以将这些值传递给calculateWages()方法。 试试这个

<select multiple="multiple" size="3">
    <option value="1" selected>One</option>
    <option value="2" disabled>Two</option>
    <option value="3" disabled>Three</option>
</select>

答案 4 :(得分:0)

您可能想通过在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