【问题标题】:Can't get code to output annual salary total无法获取输出年薪总额的代码
【发布时间】:2016-03-27 13:56:56
【问题描述】:

我创建了两个从基本“Employee”类扩展而来的类。我在下面展示了 Employee 和 Salesman 类。我需要配置 Salesman 类以显示年薪总额。员工类打印没问题,但是,我无法让销售员类打印年薪。我确定这很简单,但我被卡住了。任何帮助表示赞赏!

这是我目前得到的输出:

2014 年员工:

员工姓名:Smuck,Jenna,月薪=$3,000.00,年薪=$36,000.00

销售员姓名:Joans,Barbara,月薪=$3,200.00,年销售额=$100,000.00

销售员姓名:McMains,Ashley,月薪=$2,900.00,年销售额=$400,000.00

高管姓名:Seibert,Greg,月薪=$5,000.00,股价=$49.00

2014 年所有员工的平均工资 = $25,891.00

2015 年员工:

员工姓名:Kallinen,Brion,月薪=$3,100.00,年薪=$37,200.00

销售员姓名:Mentzer,Dickey,月薪=$4,100.00,年销售额=$75,000.00

销售员姓名:Thomas,Carol,月薪=$3,800.00,年销售额=$90,000.00

主管姓名:Tofte,Abby,月薪=$4,800.00,股价=$190.00

高管姓名:Kuehn,Jennifer,月薪=$6,000.00,股价=$79.00

主管姓名:Brown,Eric,月薪=$6,500.00,股价=$51.00

2015 年所有员工的平均工资 = 57,432.67 美元

构建成功(总时间:0 秒)

我需要它来打印销售员和高管的年薪。

    package AverageSalary;

    public class Employee {

    private String employeeName;
    private double monthlySalary;

    // Constructor that initiailizes name and monthly salary
    public Employee(String EmployeeName, double mnthSalary) {
        employeeName = EmployeeName;
        monthlySalary = mnthSalary;
    }

     //set Employee Name function
    public void setEmployeeName(String employeeName) {
        this.employeeName = employeeName;
    }

    //get Employee Name Function
    public String getEmployeeName() {
        return employeeName;
    }

     //monthlySalary
    public void setMonthlySalary(double monthlySalary) {
        this.monthlySalary = monthlySalary;
    }

    public double getMonthlySalary() {
        return monthlySalary;
    }

    // Method named annualSalary returns the salary for a whole year.
    public double annualSalary() {
        return getMonthlySalary() * 12;
    }

    // toString method returns string containing name and monthly salary
    public String toString() {
        return String.format("\nEmployee Name: %s, Monthly Salary=$%,.2f,"
        + "Annual Salary=$%,.2f", getEmployeeName(), getMonthlySalary(), 
        annualSalary());
        }
    }

    ________________________________________________________________________


    package AverageSalary;

    import java.util.HashSet;

    public class Salesman extends Employee{
    private double annualSales;

    public double getAnnualSales() {
        return annualSales;
    }

    // Constructor that initializes name, monthly salary and annual sales
    Salesman(String Name, double mnthSalary, double dblAnnualSales)
    { 
      super(Name, mnthSalary);
      this.annualSales=dblAnnualSales;
    }

    //An overridden method annualSalary that returns the salary for year 
    //Salary of salesman consists of base salary computed from the monthly  
    salary plus a commission. 
    //The commission is computed as 2% of that salesman's annual sales. 
    //The maximum commission a salesman can earn is $20,000.

    @Override
    public  double  annualSalary()
    {
        double dblSalesCommission=0;
        dblSalesCommission=(getMonthlySalary()*12)*0.02;

        if ( dblSalesCommission > 20000)
                dblSalesCommission=20000;

        return getMonthlySalary()+dblSalesCommission;
    }
     @Override
     public String toString()
     {
        return String.format("\nSalesman Name: %s, Monthly         
     Salary=$%,.2f,Annual
     Sales=$%,.2f",
         getEmployeeName(), getMonthlySalary(),
                       getAnnualSales() );
        }
    }  

【问题讨论】:

  • 您能否更清楚地说明问题?你有例外吗?如果是这样,您能否发布错误跟踪?您在哪个环境中使用这些类(Web 应用程序、独立等)?再见!
  • 我在 Netbeans 中运行它。它编译运行良好,但不显示业务员的年薪。我唯一感到困惑的代码部分是最后几行。我不太清楚如何让它输出业务员的年薪。
  • 请格式化您的代码,使其易于阅读。
  • 如果您还包括当前获得的输出以及您期望的输出,将会很有帮助。
  • 嗨,Tamas,很抱歉这个错误.. Joe..!我,还是不忘恩负义!也许你应该在 toString()... 中调用 yearSalary() 而不是 getAnnualSales() ?

标签: java


【解决方案1】:

我可以找到两个问题。

您的推销员toString() 实际上并没有打印出年薪。我将其更改为:

@Override
public String toString() {
    return String
            .format("\nSalesman Name: %s, Monthly Salary=$%,.2f,Annual Sales=$%,.2f,Annual Salary=$%,.2f",
                    getEmployeeName(), getMonthlySalary(), getAnnualSales(), annualSalary());
}

另外,您的annualSalary() 计算不正确,您需要将月薪乘以 12,然后加上佣金。

@Override
public double annualSalary() {
    double dblSalesCommission = 0;
    dblSalesCommission = getAnnualSales() * 0.02;

    if (dblSalesCommission > 20000)
        dblSalesCommission = 20000;

    return (12.0 * getMonthlySalary()) + dblSalesCommission;
}

进行这些更改为我产生了正确的输出:

Employee Name: Test Guy, Monthly Salary=$5,000.00,Annual Salary=$60,000.00
Salesman Name: Sales Guy, Monthly Salary=$5,000.00,Annual Sales=$100,000.00,Annual Salary=$61,200.00

【讨论】:

  • 请务必注意,当您@Overridea 函数时,它会替换该功能。
  • 这正是我想要做的。几个简单的错误我似乎无法弄清楚。非常感谢!
  • 很高兴我能帮上忙。
  • 关于它的最后一条评论;我确实必须更改 dblSalesCommission = (getMonthlySalary() * 12) * 0.02;到 dblSalesCommission = (getAnnualSales()) * (0.02);让它正确计算。否则,它会收取年薪的 2%,而不是销售额的 2%。谢谢!
【解决方案2】:

您的年薪计算似乎不正确。

还不清楚每年的销售额是销售员一年的销售额,还是他们一年的销售额。我假设是销售额。

// Salary of salesman consists of base salary computed 
// from the monthly salary plus a commission. 
// The commission is computed as 2% of that salesman's annual sales. 
// The maximum commission a salesman can earn is $20,000.



@Override
public double annualSalary() {
    double moneyFromSalary = getMonthlySalary * 12;

    double moneyMadePerSale = // Unknown
    double dblSalesCommission = moneyMadePerSale * annualSales * 0.02;

    if (dblSalesCommission > 20000)
            dblSalesCommission = 20000;

    return moneyFromSalary + dblSalesCommission;
}

【讨论】:

  • 这是一个很好的解释。我 Boo Radley 最终准确地指出了我正在寻找的东西,但这肯定也对我有用。感谢您的宝贵时间!
【解决方案3】:

您的问题是您的 String.format 参数是乱码。而不是

String.format("\nSalesman Name: %s, Monthly Salary=$%,.2f,Annual Sales=$%,.2f"

试试

String.format("\nSalesman Name: %s, Monthly Salary=$%.2f, Annual Sales=$%.2f",

【讨论】:

  • 感谢您的意见。看起来那是我的错误,而且我之前没有正确进行计算。我现在开始工作了。感谢您的帮助!
  • 万岁!如果您能接受我的回答,那将对我有很大帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-06
  • 1970-01-01
  • 2022-11-14
  • 2020-03-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多