我正在学习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)