JavaSE进阶

9、修改NameListService类

在NameListService类的构造器中为employees数组赋值。NameListService补充两个方法

    public NameListService() {

        employees = new Employee[EMPLOYEES.length];//根据Data.EMPLOYEES数组的长度来确定员工人数

 

        //为employees的每一个元素赋值一个员工对象信息

        for (int i = 0; i < EMPLOYEES.length; i++) {

 

        //二维数组的每一行的第1列是用来区分员工是属于什么类型的

            int type = Integer.parseInt(EMPLOYEES[i][0]);

 

            //这些属性是每个员工都有的。剩下的属性要根据员工的职务类型不同有所不同

            int id = Integer.parseInt(EMPLOYEES[i][1]);

            String name = EMPLOYEES[i][2];

            int age = Integer.parseInt(EMPLOYEES[i][3]);

            double salary = Integer.parseInt(EMPLOYEES[i][4]);

 

            Equipment eq;

            double bonus;

            int stock;

 

            //根据type的值,创建不同类型的员工对象

            switch (type) {

                case PROGRAMMER:

                    eq = createEquipment(i);//第i行的员工对应第i行的设备

                    //如果11,代表的是程序,就要创建程序员对象

                    employees[i] = new Programmer(id, name, age, salary, eq);

                    break;

                case DESIGNER:

                    eq = createEquipment(i);

                    bonus = Integer.parseInt(EMPLOYEES[i][5]);

                    employees[i] = new Designer(id, name, age, salary, eq, bonus);

                    break;

                case ARCHITECT:

                    eq = createEquipment(i);

                    bonus = Integer.parseInt(EMPLOYEES[i][5]);

                    stock = Integer.parseInt(EMPLOYEES[i][6]);

                    employees[i] = new Architect(id, name, age, salary, eq, bonus, stock);

                    break;

                default:

                //普通员工没有设备

                    employees[i] = new Employee(id, name, age, salary);

                    break;

            }

        }

    }

 

    private Equipment createEquipment(int index) {

        int type = Integer.parseInt(EQIPMENTS[index][0]);

        switch (type) {

            case PC:

                return new PC(EQIPMENTS[index][1], EQIPMENTS[index][2]);

            case NOTEBOOK:

                int price = Integer.parseInt(EQIPMENTS[index][2]);

                return new NoteBook(EQIPMENTS[index][1], price);

            case PRINTER:

                return new Printer(EQIPMENTS[index][1], EQIPMENTS[index][2]);

        }

        return null;

    }

再次运行程序