搜了下网上的文章,还是没弄明白,代码已经写到这样了,其他的功能大概都能实现了,就差排序了,求大神指教下 package com.array; /*建立一个员工管理系统,能实现如下功能: * 1.当有新员工时,将该员工加入到管理系统 * 2.可以根据员工号,显示该员工信息 * 3.可以显示员工所有信息 * 4.可以修改员工的薪水 * 5.将员工离职时,将该员工删除 * 6.可以按薪水从低到高排序【思考题】 * 7.可以统计员工的平均工资和最低和最高工 ------目前还未完成,21号争取把它做丰满*/ import java.util.*; import java.io.*; public class Demo2_5 { public static void main(String[] args) throws Exception { // TODO Auto-generated method stub //创建一个EmpManage对象 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.工资从低到高的顺序"); String operType=br.readLine(); if(operType.equals("1")) { System.out.println("请输入员工编号:"); String empNo=br.readLine(); System.out.println("请输入员工姓名:"); String name=br.readLine(); System.out.println("请输入员工工资:"); float sal=Float.parseFloat(br.readLine());//强制转换为float类型 Emp emp=new Emp(empNo,name,sal);//对象创建完成 em.addEmp(emp);//添加对象至对象em中 } else if(operType.equals("2"))//注意,这里必须加双引号,字符串个事 { System.out.println("请输入员工编号:"); String empNo=br.readLine(); em.showInfo(empNo);//显示信息 } else if(operType.equals("3")) { System.out.println("请输入员工编号:"); String empNo=br.readLine(); System.out.println("请输入员工新工资:"); Float newSal=Float.parseFloat(br.readLine()); em.updateSal(empNo, newSal); } else if(operType.equals("4")) { System.out.println("请输入要删除的员工编号:"); String empNo=br.readLine(); em.delEmp(empNo); } else if(operType.equals("5")) { //显示全部员工信息 em.showAll(); } else if(operType.equals("6")) { //退出系统 System.exit(0); } else if(operType.equals("7")) { ArrayList al = new ArrayList() ; al.add(emp); System.out.println("排序前的值"); for(int i=0;i<al.size();i++){ Emp emp = (Emp)al.get(i) ; System.out.println(emp.getSal()); } //必须是Comparator中的compare方法和Collections.sort方法配合使用才管用 MyComparator mc = new MyComparator() ; Collections.sort(al, mc) ; System.out.println("排序后的值"); for(int i=0;i<al.size();i++){ Emp emp = (Emp)al.get(i) ; System.out.println(emp.getSal()); } } } } } //雇员管理类 class EmpManage { private ArrayList al=null; //构造 public EmpManage() { al=new ArrayList(); } //加入员工 public void addEmp(Emp emp) { al.add(emp); } //显示员工的相关信息 public void showInfo(String empNo) { //遍历整个ArrayList for(int i=0;i<al.size();i++) { //取出emp对象 Emp emp=(Emp)al.get(i); //比较编号 if(emp.getEmpNo().equals(empNo)) { System.out.println("找到该员工,他的信息是:"); System.out.println("员工号:"+empNo); System.out.println("姓名:"+emp.getName()); System.out.println("工资:"+emp.getSal()); } } } //显示全部员工信息 public void showAll() { for(int i=0;i<al.size();i++ ) { //取出emp对象 Emp emp=(Emp)al.get(i); System.out.println("公司全部员工信息:"); System.out.println("员工号:"+emp.getEmpNo()); System.out.println("姓名:"+emp.getName()); System.out.println("工资:"+emp.getSal()); } } //修改工资 public void updateSal(String empNo,float newSal) { for(int i=0;i<al.size();i++) { Emp emp=(Emp)al.get(i); if(emp.getEmpNo().equals(empNo)) { //修改薪水 emp.setSal(newSal); } } } //删除某个员工 public void delEmp(String empNo) { for(int i=0;i<al.size();i++) { Emp emp=(Emp)al.get(i); if(emp.getEmpNo().equals(empNo)) { al.remove(i); } } } //工资排序 } //然后是比较实现Comparator接口,也就是定义排序规则,你几乎可以定义任何规则 class MyComparator implements Comparator{ public int compare(Object o1,Object o2) { Emp e1=(Emp)o1; Emp e2=(Emp)o2; if(e1.getSal()<e2.getSal()) return 1; else return 0; } } //雇员类 class Emp { private String empNo; private String name; private float sal; public Emp(String empNo,String name,float sal) { this.empNo=empNo; this.name=name; this.sal=sal; } 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 getSal() { return sal; } public void setSal(float sal) { this.sal = sal; } } |
|
第7个选项里的 al.add(emp);这一行报错 emp cannot be resolved to a variable,不知道这儿应该怎样把工资这一栏数据添加到al中去
|
|
20分 |
1. 报错是因为emp没有定义 |
我是想根据工资高低排序啊。这个没定义怎么办? |
|
10分 |
190行 应该是return -1吧。
|
5分 |
排序用Arrays.sort方法,自己要写一个排序器,就是实现Comparator接口的类
|
5分 |
你的emp没有定义,因为你前面定义是在if块里面所以后面拿不到。
排序的话,你可以实现Comparator接口,然后重写里面的排序方法,你想根据工资来排序的话,就可以利用两个工资相减来进行排序,然后调用Arrays.sort方法,就会帮你排好序的。 |
排序用Arrays.sort方法,自己要写一个排序器,就是实现Comparator接口的类
|
|
180行那个类不是吗? |
|
//然后是比较实现Comparator接口,也就是定义排序规则,你几乎可以定义任何规则 class?MyComparator?implements?Comparator{?? ??????? ????public?int?compare(Object?o1,Object?o2)?{?? ???????Emp?e1=(Emp)o1;?? ???????Emp?e2=(Emp)o2;??? ???????if(e1.getSal()<e2.getSal())?? ????????return?1;?? ???????else?? ????????return?0;?? ???????}?? }?? 实现Comparator接口的类我有写啊,那你说的重写是什么意思呢,在else if{ }里重写吗? |
|
哦,我没有看到,所以以为你没有重写comparator接口。这样的话就可以排序了。 |