当前位置: 首页 > 知识库问答 >
问题:

继承-从类雇员和测试中创建一个类佣金雇员

龚安民
2023-03-14

早上好,我被分配了一个任务:将佣金雇员类重写为雇员的子类。佣金雇员应该只包含超类雇员中未声明的实例变量和方法。佣金雇员的构造函数应该调用雇员的构造函数,佣金雇员的toString方法应该调用雇员的toString方法。创建一个驱动程序类来测试你的新佣金雇员类。提示用户输入名字、姓氏、社会保险号、总销售额和佣金率并创建一个佣金雇员对象,使用toString方法打印其信息。我似乎遇到的问题是类佣金雇员测试不会输出我在类佣金雇员的toString方法中放置的内容。我觉得我的超类员工和我的测试类都是正确的,但我认为错误在于我创建的确定收入的方法中的某个地方。我正在寻找的输出是员工的名字姓氏社会保障数字收入收入将是总销售额(佣金率*总销售额)的总和。这是我的错误:

class Employee
public class Employee extends Object {

    protected final String firstName;
    protected final String lastName;
    protected final String socialSecurityNumber;

    public Employee(String firstName, String lastName, String socialSecurityNumber) {
        this.firstName = firstName;
        this.lastName = lastName;
        this.socialSecurityNumber = socialSecurityNumber;
    }

    public String getFirstName() {
        return firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public String getSocialSecurityNumber() {
        return socialSecurityNumber;
    }

    @Override

    public String toString() {
        return String.format(firstName, lastName, socialSecurityNumber);
    }
}
class CommissionEmployee
public class CommissionEmployee extends Employee {

    private double grossSales;
    private double commissionRate;
    private double earnings;

    public CommissionEmployee(String firstName, String lastName, String socialSecurityNumber, double grossSales,
            double commissionRate, double earnings) {
        super(firstName, lastName, socialSecurityNumber);       

        if (grossSales < 0.0)
            throw new IllegalArgumentException("Gross sales must be >= 0.0");

        if (commissionRate <= 0.0 || commissionRate >= 1.0)
            throw new IllegalArgumentException("Commission rate must be > 0.0 and < 1.0");

        this.grossSales = grossSales;
        this.commissionRate = commissionRate;
    }

    public void setGrossSales(double grossSales) {

        if (grossSales < 0.0)
            throw new IllegalArgumentException("Gross sales must be >= 0.0");
        this.grossSales = grossSales;
    }

    public double getGrossSales() {
        return grossSales;
    }

    public void setCommissionRate(double commissionRate) {

        if (commissionRate <= 0.0 || commissionRate >= 1.0)
            throw new IllegalArgumentException("Commission rate must be > 0.0 and < 1.0");
        this.commissionRate = commissionRate;
    }

    public double getCommissionRate() {
        return commissionRate;
    }


    public Double earnings(double d) {
        return earnings(grossSales+ (commissionRate * grossSales));
    }

    public double getEarnings() {
        return earnings;
    }

    public void setEarnings(double earnings) {
        this.earnings = earnings;
    }
    @Override

    public String toString() {

        return String.format("%s: %s %s%n%s: %s%n%s: %.2f%n%s: %.2f%n%s: %.2f%n%s",
                "commission employee", firstName, lastName,
                "social security number", socialSecurityNumber,
                "Total earnings", earnings(earnings));
    }

    public void setFirstName(String firstName) {
    }

    public void setLastName(String lastName) {
    }

    public void setSocialSecurityNumber(String socialSecurityNumber) {
    }

    public void setGrossSales(String grossSales) {  
    }

    public void setCommissionRate(String commissionRate) {
    }
}
class CommissionEmployeeTest
  //CommissionEmployee test program.
 import java.util.Scanner;

  public class CommissionEmployeeTest {
     public static void main(String[] args) { // instantiate CommissionEmployee object

        CommissionEmployee employee =  
           new CommissionEmployee(null, null, null, 0, .1, 0);

        Scanner input = new Scanner(System.in);

       // get commission employee data
       System.out.printf(
          "Employee information obtained by get methods:%n");

       System.out.printf("Enter employee's First name:");
               String firstName = input.nextLine();
               employee.setFirstName(firstName);

       System.out.printf("Enter employee's last name:");
               String lastName = input.nextLine();
               employee.setLastName(lastName);

       System.out.printf("Enter employee's social security number:");
               String socialSecurityNumber = input.nextLine();
               employee.setSocialSecurityNumber(socialSecurityNumber);

       System.out.printf("Gross sales for employee:");
               String grossSales = input.nextLine();
               employee.setGrossSales(grossSales);

       System.out.printf("Commission rate for employee:");
               String commissionRate = input.nextLine();
               employee.setCommissionRate(commissionRate);         

        System.out.printf("%n%s:%n%n%s%n",
            "Updated employee information obtained by toString",                          

          employee.toString());
    }
  }

错误通过get方法获得的员工信息:输入员工的名字:John Enter员工的姓氏:Doe输入员工的社会安全号码:123456789员工总销售额:4000.00员工佣金率:.1线程“main”中的异常java.lang.StackOverflow佣金Employee.earnings(佣金Employee.java:45)错误

我试过在CommissionEmployee中使用toString方法,也试过使用我的方法来确定收入,但我感觉自己在转动轮子。谢谢你的帮助。我还有一周的时间上课,我觉得每周发一个问题时,我可以提供更多的信息,而不是上一个问题。提前谢谢你。

共有1个答案

仲孙华奥
2023-03-14

我已经解决了这个问题。经过(几次)复习和修改,我找到了我的答案。我需要修改我的toString方法和收入方法。清理了不少代码并解决了问题。

 类似资料:
  • 如果你正在管理开源项目中的程序员,要尽量保持足够的时间,这样他们才能获得足够的技术和政治技能—最少也需要几年时间。当然,没有项目,无论是开源还是闭源,都可以从轮换程序员中获益。新来者搞清楚窍门需要的时间在不同环境下各不相同。但是在开源项目中的代价更加巨大,因为离开的开发者不仅带走了他们的知识,也带走了社区中的他们的地位和其中建立的人际关系。 开发者已经积累的信誉不能够传递。一个新来的开发者不能继承

  • 下面关于 Employer 和 Employee 的关系模型使用了一个真实的实体类(Employment)来表述,这是因为对于相同的雇员和雇主可能会有多个雇佣时间段。对于金额和雇员姓名,用 Components 建模。 映射文件可能是这样: <hibernate-mapping> <class name="Employer" table="employers">

  • 我有两节课。 < code>EmployeeInfo类返回一个< code >雇员类型。 现在,和之间的

  • 本文向大家介绍说一下类的创建和继承?相关面试题,主要包含被问及说一下类的创建和继承?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: (1)类的创建(es5):new一个function,在这个function的prototype里面增加属性和方法。 下面来创建一个Animal类: 这样就生成了一个Animal类,实力化生成对象后,有方法和属性。 (2)类的继承——原型链继承 --原型链继承

  • 我有一个密封和公共类对象在项目的许多类中使用。 我需要创建一个新的类对象,将两个类中的所有属性组合在一起,而不是重复所有属性。以下内容可以将pagerequest属性引入到新类中,但我如何才能获取Customer类的属性。我不能继承Customer的属性,因为它是一个密封类。从Customer中删除sealed可能不是一个好主意,因为它已被许多应用程序领域使用,即使我不能同时将Customer和P

  • 我正在为扩展了B类的a类编写单元测试。我正在使用Mockito,我想模拟一个组织。slf4j。这两个类都可以使用。问题是,当类A从类B调用方法时,模拟记录器没有被注入到类B中,所以我得到了一个NPE。有没有办法成功地测试这一点?