【问题标题】:Getting a value form "get and set" in java在java中获取值形式“get and set”
【发布时间】:2014-10-29 23:28:00
【问题描述】:

我有一个困扰我的学校问题。问题是总工资一直是 0.0。

问题来了:

设计一个包含以下字段的 Payroll 类:

• name : 包含员工姓名的字符串 • idNumber:一个表示员工 ID 号的 int • rate:包含员工小时工资率的双精度值 • hours:一个int,表示该员工工作的小时数

该类还应具有以下方法:

• 构造函数:将员工姓名和身份证号作为参数 • 访问器:允许访问薪资类的所有字段 • Mutators:让用户为 Payroll 类的字段赋值 • GrossPay:返回员工的工资总额,计算方式为: 工作时间乘以小时工资率。

编写另一个程序,通过创建 Payroll 对象来演示该类,然后 要求用户按顺序输入员工的数据:姓名、身份证号、费率、小时数。 然后程序应该打印出以下格式的语句(例如,如果 您有一位名叫 Chris Jacobsen 的员工,其 ID 号为 11111,他在 10 美元/小时):

员工编号 11111 的 Chris Jacobsen 的总工资为 50.00 美元。

使用文本格式将总工资四舍五入到小数点后两位。

这是我目前所拥有的:

         import java.util.Scanner;

     public class Payroll
     {
        private String EmployeeName;
        private int IDnumber;
        private double HourlyPayRate;
        private double TotalHoursWorked;
        private double TotalGrossPay;

        public Payroll(String Name, int ID, double HourlyRate, double HoursWorked)
        {
            EmployeeName = Name;
            IDnumber = ID;
        }
        public String getEmployeeName()
        {
            return EmployeeName;
        }
        public int getIDnumber()
        {
            return IDnumber;
        }
        public void setHourlyPayRate(double HourlyRate)
        {
            HourlyPayRate = HourlyRate;
        }
        public double getHourlyPayRate()
        {
            return HourlyPayRate;
        }
        public void setTotalHoursWorked(double HoursWorked)
        {
            TotalHoursWorked = HoursWorked;
        }
        public double getTotalHoursWorked()
        {
            return TotalHoursWorked;
        }
        public void setTotalGrossPay(double GrossPay)
        {
            TotalGrossPay = GrossPay;
        }
        public double getTotalGrossPay(double HourlyRate, double HoursWorked)
        {
            TotalGrossPay = HourlyRate * HoursWorked;
           return TotalGrossPay;
        }


        public static void main(String[] args)
        {
            String EmployeeName;
            int IDnumber;
            double TotalHoursWorked;
            double HourlyPayRate;
            double TotalGrossPay;

           Scanner keyboard = new Scanner(System.in);

            System.out.print("Enter employee's name:");
            EmployeeName = keyboard.nextLine();

            System.out.print("Enter employee's ID number:" );
            IDnumber = keyboard.nextInt();

            System.out.print("Enter hourly rate:");
            HourlyPayRate = keyboard.nextDouble();

            System.out.print("Enter number of hours worked:");
            TotalHoursWorked = keyboard.nextDouble();

            Payroll pay = new Payroll(EmployeeName, IDnumber, HourlyPayRate, TotalHoursWorked);

            System.out.print(EmployeeName + ", " + "employee number " + IDnumber + ", made $" + 
           pay.TotalGrossPay + " in gross pay.");
       }
  }

感谢您的帮助...

【问题讨论】:

  • 你提供什么作为输入?
  • 您错过了对方法 getTotalGrossPay 的调用。不要使用 pay.TotalGrossPay (因为这将返回默认设置为 0 的当前值)而不是执行此支付。 getTotalGrossPay()
  • 你必须调用你的方法而不是付费。 getTotalGrossPay 并且您的方法必须是静态的,或者在您的主​​要方法中为 pay 类定义实例...

标签: java


【解决方案1】:

TotalGrossPay是一个计算值,除非你调用方法来计算它,否则它将保持默认值(0

事实上,你不应该存储这个值,因为它的值实际上是由其他字段的计算决定的。

从您的类中删除 TotalGrossPay 字段并编写一个简单的“getter”来计算值并返回它...

public double getTotalGrossPay()
{
    return HourlyRate * HoursWorked;
}

作为一般经验法则,您不应直接访问字段,而应始终通过方法访问其值(设置/获取)

另外,不要忽略传递给构造函数的值...

public Payroll(String Name, int ID, double HourlyRate, double HoursWorked)
{
    EmployeeName = Name;
    IDnumber = ID;
    // What about HourlyRate and HoursWorked??
}

要么让用户提供这些 vai 设置器,要么在你的构造函数中分配它们(是的,你可以在事后使用设置器来更改值......)

public Payroll(String Name, int ID, double HourlyRate, double HoursWorked)
{
    EmployeeName = Name;
    IDnumber = ID;
    this.HourlyRate = HourlyRate;
    this.HoursWorked = HoursWorked;
}

您可能想通读Code Conventions for the Java TM Programming Language,它会让人们更容易阅读您的代码,也让您更容易阅读其他人

【讨论】:

    【解决方案2】:

    在您的构造函数中,您没有对 HourlyRate 和 HoursWorked 做任何事情

    public Payroll(String Name, int ID, double HourlyRate, double HoursWorked)
    

    为什么您的 getter 需要将参数重命名为 calculateGrossPay() 之类的名称。删除它们并使用实例成员HourlyRateHoursWorked 来计算总工资。这就是为什么你得到一个 0.0 的结果

    这里还有一点值得注意的是,未初始化的双变量被Java设置为0.0

    public double getTotalGrossPay(double HourlyRate, double HoursWorked)
    

    【讨论】:

    • 或者更好的是,从 getter 中删除参数。
    • 您发表评论时正在编辑帖子。使用手机让我变慢了
    猜你喜欢
    • 1970-01-01
    • 2023-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-21
    • 2010-10-17
    • 1970-01-01
    • 2022-11-20
    相关资源
    最近更新 更多