繁体   English   中英

为什么生成的片段显示为双精度而不是整数?

[英]Why does pieces produced display as a double rather than an integer?

我刚刚开始高级Java课程,对这里所有这些人都有疑问。 如何使PayrollSystemTest将PieceWorker生产的零件显示为整数而不是双数? 我尝试将getPieces更改为int,但这产生了转换异常。 任何有关此的信息将不胜感激。 感谢您的时间。

PieceWorker.java:

 public class PieceWorker extends Employee 
{
  private double wage; // wage per piece
  private int pieces;  // pieces produced

  // constructor

public PieceWorker(String firstName, String lastName, String socialSecurityNumber, double wage, int pieces) 
{
    super(firstName, lastName, socialSecurityNumber);

    if (wage < 0.0) //validate wage
        throw new IllegalArgumentException("Wage must be >= 0.0");

    if ((pieces < 0))
        throw new IllegalArgumentException("Pieces produced must be >=0");

    this.wage = wage;
    this.pieces = pieces;
}

//set wage
    public void setWage(double wage)
    {
    if(wage < 0.0) // validate wage
        throw new IllegalArgumentException ("Wage must be >= 0.0");

    this.wage = wage;
    }

    //return wage
    public double getWage()
    {
        return wage;
    }

    //set hours worked
    public void setPieces(int pieces)
    {
        if ((pieces < 0))
            throw new IllegalArgumentException("Pieces produced must be >=0");


        this.pieces = pieces;
    }

    //return pieces produced
    public double getPieces()
    {
        return pieces;
    }

@Override
public double earnings() {
    return getPieces() * getWage();
}

@Override
public String toString()
{
    return String.format("piece worker: %s%n%s: $%,.2f, %s: %,.2f", super.toString(), "wage", getWage(), "pieces produced", getPieces());
}
}

PayrollSystemTest.java

// Fig 10.9: PayrollSystemTest.java
// Employee hierarchy test program.

public class PayrollSystemTest 
{
public static void main(String[] args)
{
    // create subclass objects
    SalariedEmployee salariedEmployee = new SalariedEmployee("John", "Smith", "111-11-1111", 800.00);
    HourlyEmployee hourlyEmployee = new HourlyEmployee("Karen", "Price", "222-22-2222", 16.75, 40);
    CommissionEmployee commissionEmployee = new CommissionEmployee("Sue", "Jones", "333-33-3333", 10000, .06);
    BasePlusCommissionEmployee basePlusCommissionEmployee = new BasePlusCommissionEmployee("Bob", "Lewis", "444-44-4444", 5000, .04, 300);
    PieceWorker pieceWorker = new PieceWorker("Tom", "Jacobson", "555-55-5555", 32.50, 80);

    System.out.println("Employees processed individually:");

    System.out.printf("%n%s%n%s: $%,.2f%n%n", salariedEmployee, "earned", salariedEmployee.earnings());
    System.out.printf("%s%n%s: $%,.2f%n%n", hourlyEmployee, "earned", hourlyEmployee.earnings());
    System.out.printf("%s%n%s: $%,.2f%n%n", commissionEmployee, "earned", commissionEmployee.earnings());
    System.out.printf("%s%n%s: $%,.2f%n%n", basePlusCommissionEmployee, "earned", basePlusCommissionEmployee.earnings());
    System.out.printf("%s%n%s: $%,.2f%n%n", pieceWorker, "earned", pieceWorker.earnings());

    //create four-element Employee array
    Employee[] employees = new Employee[5];

    //initialize array with Employees
    employees[0] = salariedEmployee;
    employees[1] = hourlyEmployee;
    employees[2] = commissionEmployee;
    employees[3] = basePlusCommissionEmployee;
    employees[4] = pieceWorker;

    System.out.printf("Employees processed polymorphically:%n%n");

    //generically process each element in array employees
    for (Employee currentEmployee : employees)
    {
        System.out.println(currentEmployee); // invokes toString

        //determines whether element is a BasePlusCommissionEmployee
        if (currentEmployee instanceof BasePlusCommissionEmployee)
        {
            //downcast Employee reference to
            //BasePlusCommissionEmployee reference
            BasePlusCommissionEmployee employee = (BasePlusCommissionEmployee) currentEmployee;

            employee.setBaseSalary(1.10 * employee.getBaseSalary());

            System.out.printf("new base salary with 10%% increase is: $%,.2f%n", employee.getBaseSalary());
        }// end if
    } //end for

    // get type name of each object in employees array
    for (int j = 0; j < employees.length; j++)
        System.out.printf("Employee %d is a %s%n", j, employees[j].getClass().getName());
}// end main
}// end class PayrollSystemTest

您还必须调整toString()方法。
更改

public String toString()
{
    return String.format("piece worker: %s%n%s: $%,.2f, %s: %,.2f", super.toString(), "wage", getWage(), "pieces produced", getPieces());
}

public String toString()
{
    return String.format("piece worker: %s%n%s: $%,.2f, %s: %d", super.toString(), "wage", getWage(), "pieces produced", getPieces());
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM