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

问题描述

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)

解决方案

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

解决方案二:

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

时间: 2024-08-03 20:42:51

java问题新手求帮助,运行有问题的相关文章

关于java问题-新手求指教:如何描述项目

问题描述 新手求指教:如何描述项目 才开始学java不久,刚学完核心java,做了一个web服务器模拟的项目.要怎么样去详细的描述啊.求大神指教-- 解决方案 还可以说是这个项目的亮点和难点,你是如何解决的等等. 解决方案二: 新手,求指教.新手求指教---------------------- 解决方案三: 做的什么 叫什么名字 可以达到什么目的 大概使用了什么技术 大概就这些 解决方案四: 同楼上,还有,你有了哪些收获 解决方案五: 介绍项目的开发历程,一些技术点 解决方案六: 做的什么项目

java ee-工程用ant1.8打完包放在webapps里服务器运行报错。学生新手求大神帮忙~

问题描述 工程用ant1.8打完包放在webapps里服务器运行报错.学生新手求大神帮忙~ 4138 [localhost-startStop-1] ERROR org.springframework.web.context.ContextLoader - Context initialization failed java.lang.IllegalArgumentException at org.springframework.asm.ClassReader.(Unknown Source)

java 串口-代码,运行结果如下,为什么结果会重复5次,java新手求解惑

问题描述 代码,运行结果如下,为什么结果会重复5次,java新手求解惑 int x=0; Enumeration portList1 = CommPortIdentifier.getPortIdentifiers(); while (portList1.hasMoreElements()) { x++; test_buffer[x]=((CommPortIdentifier) portList1.nextElement()).getName(); System.out.println("第&qu

线程停止-java如何停止当前正在运行的线程,新手求解答

问题描述 java如何停止当前正在运行的线程,新手求解答 最近想做一个无线数据监控服务端,用java做的,面板Jframe设置了一个Jpanel,我称这个为Jpanel 1 ,在Jpanel 1中我定义了一个多选JCheckbox,有四种监控方式可选:Bluetooth,Wifi,GPRS,Zigbee.还定义了一个JButton,分为开始ON,结束OFF,然后在JPanel 1中定义了JPanel 2,JPanel 2 中我定义了JScrollPane,scrollAndSetCursor用于

新手入门-新手求问为什么我的记事本写的程序运行不起来T_T

问题描述 新手求问为什么我的记事本写的程序运行不起来T_T Java初学者用记事本写的程序用cmd运行不起来,能翻译成class但是就是输出不了,但是用eclipse可以T_TT_T 解决方案 不是用cmd运行的啊,你编译后的程序放在tomcat下运行了吗 解决方案二: 用java运行 参考 http://ivan0513.iteye.com/blog/982445 ,看下环境变量 你说运行不了,请贴出截图和错误信息. 解决方案三: 你你命令行写对了吗 解决方案四: java 类名(不能带.cl

ava基础 代码错误-Java新手,求大神帮小弟看看这段代码哪里错了,多谢!!!

问题描述 Java新手,求大神帮小弟看看这段代码哪里错了,多谢!!! class Student { //姓名 private String name; //年龄 private int age; //构造方法 public Student(){ } public Student(String name, int age){ this.name = name; this.age = age; } public String getName(){ return name; } public voi

java 新手求问cannot be resolved to a type 的解决方法

问题描述 java 新手求问cannot be resolved to a type 的解决方法 这是我自学的一个项目,以前没发现这样的问题,jdk8.65,eclipse是最新版,看了网上的同类问题好像是jar包导入的问题,但是不知道具体怎样解决,请路过的大神指点迷津,万分感谢 import java.awt.*; import java.awt.event.*; public class ChatClient extends Frame{ TextArea ta = new TextArea

冒泡排序-java入门新人求代码:html中如何让一个提交按钮运行十个空格。

问题描述 java入门新人求代码:html中如何让一个提交按钮运行十个空格. 是这样,我做一个网页版的冒泡排序,对10个数字进行冒泡排序,每个数字占一个空格(表格), 然后设定一个提交按钮,点击这个按钮后可以对这十个空格的数字进行冒泡排序. 请不吝指教,谢谢. 要完整的代码,谢谢. 解决方案 可以这样写 ......复制十遍 用个form表单包着,这样就可以随机让别人输入10个数了,再加个ajax点击事件,这样点击它后台通过request.getparametervalues("shuzhi&q

语言-新手求帮忙看下这段代码的数据溢出问题,没有C币理解下(我是在CodeBlock10.05下运行的)

问题描述 新手求帮忙看下这段代码的数据溢出问题,没有C币理解下(我是在CodeBlock10.05下运行的) #include #include #include unsigned int Ex_secret[30]={11,4,120,75,170,204,90,59,78,49,//用0~255的数表示8位2进制,一共240位 148,248,190,137,0,9,17,91,174,105,45,124,177,205,57,97,194,155,120,36}; unsigned in