2 wushuang921128 WUSHUANG921128 于 2013.09.06 21:25 提问

java问题新手求帮助,运行有问题

我正在学习java,自己写了一个程序,运行时选择第七点出错,不知道是不是ShowHTD类有错还是怎么回事,求大神帮忙解决,代码和报错信息附上,
代码:
/*

  • 功能:员工管理系统
  • 时间:2013.09.05 */

package pack1;
import java.util.*;
import java.io.*;
public class Employeemanage {

/**
 * @param args
 */
public static void main(String[] args)throws Exception {
    // TODO Auto-generated method stub
    //创建EmpMamnage对象
    EmpManage em = new EmpManage();
    //做出菜单
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    while(true)
    {
        System.out.println("请选择你需要进行的操作:");
        System.out.println("1.加入新员工");
        System.out.println("2.显示员工信息");
        System.out.println("3.修改员工工资");
        System.out.println("4.删除员工信息");
        System.out.println("5.退出系统");
        System.out.println("6.显示公司员工名单");
        System.out.println("7.按工资高低显示员工信息");
        System.out.println("8,计算员工的平均工资");
        System.out.println("9.计算员工的总工资");
        String operaType = br.readLine();
        if(operaType.equals("1"))
        {
            System.out.println("请输入员工入职编号:");
            String no = br.readLine();
            System.out.println("请输入员工姓名:");
            String name =br.readLine();
            System.out.println("请输入员工入职薪金:");
            String s_sal = br.readLine();
            float sal = Float.parseFloat(s_sal);
            Emp emp = new Emp(no,name,sal);
            em.AddEmp(emp);

        }
        else if(operaType.equals("2"))
        {
            System.out.println("请输入员工的在职编号:");
            String empno = br.readLine();
            em.ShowEmp(empno);
        }
        else if(operaType.equals("3"))
        {
            System.out.println("请输入员工的在职编号:");
            String empno = br.readLine();
            System.out.println("请输入给员工新定的工资:");
            float sal = Float.parseFloat(br.readLine());
            em.ChangeEmp(empno, sal);
        }
        else if(operaType.equals("4"))
        {
            System.out.println("请输入离职员工在职时的编号:");
            String empno = br.readLine();
            em.DelectEmp(empno);
        }
        else if(operaType.equals("5"))
        {
            System.exit(0);
            System.out.println("已安全退出系统!"+"\n"+"欢迎下次使用!");
        }
        else if(operaType.equals("6"))
        {
            em.ShowAll();
        }
        else if(operaType.equals("7"))
        {
            em.ShowHTD();
        }
        else if(operaType.equals("8"))
        {
            System.out.println("员工平均工资为:"+em.Avesal());
        }
        else if(operaType.equals("9"))
        {
            System.out.println("员工的总工资为:"+em.Sumsal());
        }
    }

}

}
//雇员管理
class EmpManage
{
private ArrayList al = null;
//构造函数
public EmpManage()
{
al = new ArrayList();
}
//加入员工
public void AddEmp(Emp emp)
{
al.add(emp);
}
//显示员工信息
public void ShowEmp(String empno)
{
//遍历查询
for(int i=0;i<al.size();i++)
{
//取出对象
Emp emp = (Emp)al.get(i);
//比较编号
if(emp.getEmpno().equals(empno))
{
System.out.println("已找到该员工信息!");
System.out.println("员工工号:"+emp.getEmpno());
System.out.println("员工姓名:"+emp.getName());
System.out.println("员工月薪:"+emp.getSla());

        }
        else
        {
            System.out.println("对不起,您需要查询的员工编号不存在!请核证后重新查询!");
            break;
        }               
    }
}
//修改员工工资
public void ChangeEmp(String empno,float sla)
{
    //遍历查询
    for(int i=0;i<al.size();i++)
    {
        Emp emp = (Emp)al.get(i);
        if(emp.getEmpno().equals(empno))
        {
            emp.setSla(sla);
        }
        else 
        {
            System.out.println("对不起,您需要修改工资的员工编号不存在!请核证后重新查询!");
            break;
        }
    }

}
//删除离职员工
public void DelectEmp(String empno)
{
    //遍历查询
    for(int i=0;i<al.size();i++)
    {
        Emp emp = (Emp)al.get(i);
        if(emp.getEmpno().equals(empno))
        {
            al.remove(i);
        }
        else 
        {
            System.out.println("对不起,您需要删除的员工不存在!请核证后重新查询!");
            break;
        }
    }
}
//显示员工名单
public void ShowAll()
{
    for(int i=0;i<al.size();i++)
    {
        //取出对象
        Emp emp = (Emp)al.get(i);
        System.out.println(emp.getName());
    }
}
//按工资高低显示员工信息
public void ShowHTD ()
{
    Emp temp;
    //定义一个一维数组用来存放取出来的员工工资
    Emp[] sal = new Emp[al.size()];
    //冒泡排序,将员工工资排序
    for(int i=0;i<al.size();i++)
    {
        for(int j=0;j<al.size()-i;j++)
        {
            if(sal[i].getSla()<sal[i+1].getSla())
            {
                temp = sal[i];
                sal[i] = sal[i+1];
                sal[i+1] = temp;
            }
        }
    }

    //打印结果
    for(int i=0;i<sal.length;i++)
    {
        System.out.println(sal[i].getSla()+sal[i].getName()+sal[i].getEmpno());
    }

}
//计算员工总工资
public float Sumsal()
{
    float sum = 0;
    for(int i=0;i<al.size();i++)
    {
        //取出对象
        Emp emp = (Emp)al.get(i);
        sum += emp.getSla();
    }
    return sum;
}
//计算员工平均工资
public float Avesal()
{
    //先计算总工资
    float sum = 0;
    for(int i=0;i<al.size();i++)
    {
        //取出对象
        Emp emp = (Emp)al.get(i);
        sum += emp.getSla();
    }
    //算平均工资
    return (sum/al.size());
}

}
//雇员类
class Emp
{
//员工工号
private String empno;
//员工姓名
private String name;
//员工月薪
private float sla;
//构造方法
Emp(String empno,String name,float sla)
{
this.empno = empno;
this.name = name;
this.sla = sla;
}
public String getEmpno() {
return empno;
}
public void setEmpno(String empno) {
this.empno = empno;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public float getSla() {
return sla;
}
public void setSla(float sla) {
this.sla = sla;
}

}

报错信息:

Exception in thread "main" java.lang.NullPointerException
at pack1.EmpManage.ShowHTD(Employeemanage.java:188)
at pack1.Employeemanage.main(Employeemanage.java:77)

2个回答

th943699181
th943699181   2013.09.11 17:19

我只能告诉你这是空指向异常,你看看你哪里的实例有方法调用错误吧

WUSHUANG921128
WUSHUANG921128   2013.10.18 17:39

已经解决,是冒泡排序哪里有点小问题

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!