【问题标题】:Java - class, get new array of objectsJava - 类,获取新的对象数组
【发布时间】:2016-05-18 08:06:32
【问题描述】:

我在这个练习中需要一些帮助。

我想把所有员工的工资一起打印出来,但是我不能让它工作。

当我创建一个新部门时,我想接收我只写对象(工人)名称的工作,而不是重新输入信息。

实际结果(打印为0时出错):

id: 1234567 name: david Hourly Wage: 25 Number Of Hours: 50 Final Salary: 1250
id: 234567 name: foo Hourly Wage: 50 Number Of Hours: 30 Final Salary: 1500
0
calculate Department Salery: 0

预期结果:一起计算所有工人的工资。

主类

public class main {
    public static void main(String[] args) {
        Worker work1 = new Worker("1234567");
        work1.name = "david";
        work1.Number_Of_Hours = 50;
        work1.Hourly_Wage = 25;

        Worker work2 = new Worker("234567","foo",50,30);

        work1.calculateSalery(55);
        work2.calculateSalery(60);

        System.out.println(work1.toString());
        System.out.println(work2.toString());


        Department cp = new Department();
        cp.addEmploy("123", "av", 25, 50);

        System.out.println(cp.calculateDepartmentSalery());

        System.out.println(cp.toString());
    }
}

类工作者

public class Worker {
    public String id;
    public String name;
    public int Hourly_Wage;
    public int Number_Of_Hours;

    public Worker(String _id) {
        id = _id;
    }

    public void addHoure(int hours) {
        Number_Of_Hours += hours;
    }

    public Worker(String _id, String _name, int _Hourly_Wage,
                  int _Number_Of_Hours) {
        id = _id;
        name = _name;
        Hourly_Wage = _Hourly_Wage;
        Number_Of_Hours = _Number_Of_Hours;
    }

    public void clearHour() {
        Number_Of_Hours = 0;
    }

    int FinalSalary = 0;

    public int calculateSalery(int h) {
        int cal = 0;
        if (h > Number_Of_Hours) {
            cal = h - Number_Of_Hours;
            cal = cal * ((Hourly_Wage / 100) * 120);
            FinalSalary = (Hourly_Wage * Number_Of_Hours) + cal;
        }

        else {
            FinalSalary = Hourly_Wage * Number_Of_Hours;
        }
        return FinalSalary;
    }

    public String toString() {
        String str = "id: " + id + " name: " + name + " Hourly Wage: "
                + Hourly_Wage + " Number Of Hours: " + Number_Of_Hours
                + " Final Salary: " + FinalSalary;
        return str;
    }
}

班级部

public class Department {
    public String name;
    public int Annual_budget;
    public final int Max_Workers = 30;
    private Worker[] arrWork = null;
    private int Index;

    public Department() {
        arrWork = new Worker[Max_Workers];
        Index = 0;
    }

    public boolean addEmploy(String _id, String _name, int _Hourly_Wage,
                             int _Number_Of_Hours) {
        arrWork[Index] = new Worker(_id, _name, _Hourly_Wage, _Number_Of_Hours);
        return true;
    }

    int result = 0;

    public int calculateDepartmentSalery() {

        for (int i = 0; i < Index; i++) {
            if (arrWork[i] != null)
                result += arrWork[i].FinalSalary;
        }
        return result;

    }

    public String toString() {
        String str = "calculate Department Salery: " + result;
        return str;
    }
}

【问题讨论】:

  • 请在问题中包括出了什么问题,实际结果是什么,预期结果是什么。
  • 好的,已更改,谢谢。
  • 你的命名不好:类名应以大写字母开头,方法和字段应以小写字母开头。但是,你的问题是Index 没有增加addEmploy,所以当calculateDepartmentSalery() 被调用时它仍然是0,并且循环不会做任何事情。此外,您不应将结果存储在字段中。如果calculateDepartmentSalery() 被调用两次会发生什么?哎呀。学会调试,你会发现这样的错误比在这里写一个问题等待答案更快。
  • 我不去锻炼只是因为你需要帮助!
  • @scndjs 好吧,您可以使用调试器找出自己。提示:如果 index 为 0,并且循环从 0 运行到小于 index 的某个值,循环将运行多少次?

标签: java algorithm class


【解决方案1】:

您可能需要查看基本的OOPobject-oriented programming。在WorkerDepartment 中定义的变量应该是私有的,使用诸如getID()setID(String ID) 之类的方法。工人应该像这样存储在ArrayList 中:

ArrayList<Worker> workers = new ArrayList<Worker>();
workers.add(new Worker(*input proper data*));

如果您打算对工人的工资求和,您可以使用 for-each 循环遍历 workers

int sum = 0;
for(Worker w : workers){
sum += w.calculateSalary(w.getH());//you may need to include an "h" variable in the worker class
}

此外,这些调用:

work1.calculateSalery(55);
work2.calculateSalery(60);

绝对没有意义,因为您没有将这些计算存储在任何地方。由于calculateSalery(); 返回类型int,您可以将这些值存储在int 变量中。但是,您可能希望将 double 变量类型用于诸如 Hourly_Wage, Number_Of_Hours, 和方法 calculateSalery(); 之类的东西

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-29
    • 2013-04-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-28
    相关资源
    最近更新 更多