问题描述
- 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)
解决方案
我只能告诉你这是空指向异常,你看看你哪里的实例有方法调用错误吧
解决方案二:
已经解决,是冒泡排序哪里有点小问题