public static void main(String[] args) {

Company c = new Company();

PerHourWorker phw1 = new PerHourWorker();
phw1.setPerHourSalary(10);
phw1.setWorkTime(200);

PerHourWorker phw2 = new PerHourWorker();
phw2.setPerHourSalary(10);
phw2.setWorkTime(230);

SalesWorker sw1 = new SalesWorker();
sw1.setAllSalary(5000);

SalesWorker sw2 = new SalesWorker();
sw2.setAllSalary(200000);

CommonWorker cw = new CommonWorker();
cw.setWorkTime(205);

c.addEmployee(phw1);
c.addEmployee(phw2);
c.addEmployee(sw1);
c.addEmployee(sw2);
c.addEmployee(cw);

//输出总共应付的工资
c.showAllSalary(c.employee);
/*
 * 添加首饰工人
 */
DecorateWorker dw = new DecorateWorker();
dw.setProduceNumber(30);
c.addEmployee(dw);

//输出总共应付的工资
c.showAllSalary(c.employee);
}
编译这样报错
Exception in thread "main" java.lang.NullPointerException
at 第三次.Main.main(Main.java:36)

解决方案 »

  1.   

    c.showAllSalary(c.employee);  
    把这个方法也贴出来
      

  2.   

    public class Company {
    Employee employee[] = new Employee[10000];//定义一个职工类数组

    /*
     * 添加一个员工
     */
    public void addEmployee(Employee employee1) {
    int i=0;

    if(i<employee.length) {
    employee[i] = employee1;i++;
    }else {
    System.out.println("数组空间已满,请重新分配内存!");}
    }
    /*
     * 通过员工的名字来删除员工
     */
    public void deleteEmployee(Employee employee1) {
    int i = 0;
    /*
     * 当所给的人员与数组中当前的人员信息不一致时则向后继续查找
     * */
    while(i<employee.length && !(employee[i].equals(employee1))) {
    i ++;
    }
    for(; i<employee.length; i++) {
    employee[i] = employee[i+1];
    }
    }


    /*
     * 通过员工的名字来显示员工的工资
     */
    public void showSalary(Employee employee1) {
    int i = 0;
    while(i<employee.length && employee[i].equals(employee1)) {
    System.out.println("职工的姓名为:" + employee1.name);
    System.out.println("职工的工资为" + employee1.computeSalary());
    }
    }


    /*
     * 输出所有员工的工资和
     * */
    public void showAllSalary(Employee employ[]) {
    double salary = 0;
    for(int i=0; i<employ.length; i++) {
    salary = salary + employ[i].computeSalary();
    }
    System.out.println("所有员工的工资总和为:" + salary);
    }
    }
      

  3.   

    因为你Employee employee[] = new Employee[10000];//定义一个职工类数组 ,所以employ.length=10000,但是你添加Employee的个数少于10000个,所以for(int i=0; i <employ.length; i++){...employ[i].computeSalary(); ...} 之类的一定会越界报错。
      

  4.   


    package csdn;public class Company {
    Employee employee[] = new Employee[10000];// 定义一个职工类数组 /*
     * 添加一个员工
     */
    public void addEmployee(Employee employee1) {
    int i = 0;
    // ADD1 START
    while (i < employee.length && !(employee[i] == null)) {
    i++;
    }
    // ADD1 END
    if (i < employee.length) {
    employee[i] = employee1;
    // del1 i++;
    } else {
    System.out.println("数组空间已满,请重新分配内存!");
    }
    } /*
     * 通过员工的名字来删除员工
     */
    public void deleteEmployee(Employee employee1) {
    int i = 0;
    /*
     * 当所给的人员与数组中当前的人员信息不一致时则向后继续查找
     */
    while (i < employee.length && !(employee[i] == employee1)) {
    i++;
    }
    for (; i < employee.length; i++) {
    employee[i] = employee[i + 1];
    }
    } /*
     * 通过员工的名字来显示员工的工资
     */
    public void showSalary(Employee employee1) {
    int i = 0;
    while (i < employee.length && !(employee[i] == null)) {
    System.out.println("职工的姓名为:" + employee1.name);
    System.out.println("职工的工资为" + employee1.computeSalary());
    }
    } /*
     * 输出所有员工的工资和
     */
    public void showAllSalary(Employee employ[]) {
    double salary = 0;
    for (int i = 0; i < countEmployee(employ); i++) {// edit2 for (int i =
    // 0; i <
    // employ.length;
    // i++) {
    salary = salary + employ[i].computeSalary();
    }
    System.out.println("所有员工的工资总和为:" + salary);
    } // add2 start
    public int countEmployee(Employee employ[]) {
    int i = 0;
    while (i < employee.length && !(employee[i] == null)) {
    i++;
    }
    return i;
    } // add2 end
    public static void main(String[] args) { Company c = new Company(); Employee phw1 = new Employee(); c.addEmployee(phw1);
    Employee phw2 = new Employee(); c.addEmployee(phw2); // 输出总共应付的工资
    c.showAllSalary(c.employee);

    }
    }