ArrayList数组里可以存放任何内容的字符么,怎么排序

J2EE 码拜 10年前 (2015-04-13) 1274次浏览 0个评论

搜了下网上的文章,还是没弄明白,代码已经写到这样了,其他的功能大概都能实现了,就差排序了,求大神指教下

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;
	}
}
ArrayList数组里可以存放任何内容的字符么,怎么排序
第7个选项里的  al.add(emp);这一行报错 emp cannot be resolved to a variable,不知道这儿应该怎样把工资这一栏数据添加到al中去
ArrayList数组里可以存放任何内容的字符么,怎么排序
20分
引用 1 楼 u012875881 的回复:

第7个选项里的  al.add(emp);这一行报错 emp cannot be resolved to a variable,不知道这儿应该怎样把工资这一栏数据添加到al中去

1. 报错是因为emp没有定义
2. “应该怎样把工资这一栏数据添加到al中去”是什么意思?al中存的是Emp对象,工资是Emp的一个属性,emp存到al中就可以了。

ArrayList数组里可以存放任何内容的字符么,怎么排序
引用 1 楼 u012875881 的回复:

第7个选项里的  al.add(emp);这一行报错 emp cannot be resolved to a variable,不知道这儿应该怎样把工资这一栏数据添加到al中去

我是想根据工资高低排序啊。这个没定义怎么办?

ArrayList数组里可以存放任何内容的字符么,怎么排序
10分
190行 应该是return -1吧。
ArrayList数组里可以存放任何内容的字符么,怎么排序
5分
排序用Arrays.sort方法,自己要写一个排序器,就是实现Comparator接口的类
ArrayList数组里可以存放任何内容的字符么,怎么排序
5分
你的emp没有定义,因为你前面定义是在if块里面所以后面拿不到。
排序的话,你可以实现Comparator接口,然后重写里面的排序方法,你想根据工资来排序的话,就可以利用两个工资相减来进行排序,然后调用Arrays.sort方法,就会帮你排好序的。
ArrayList数组里可以存放任何内容的字符么,怎么排序
排序用Arrays.sort方法,自己要写一个排序器,就是实现Comparator接口的类
ArrayList数组里可以存放任何内容的字符么,怎么排序
引用 5 楼 longtian1213 的回复:

排序用Arrays.sort方法,自己要写一个排序器,就是实现Comparator接口的类

180行那个类不是吗?

ArrayList数组里可以存放任何内容的字符么,怎么排序
引用 6 楼 xiangnan129 的回复:

你的emp没有定义,因为你前面定义是在if块里面所以后面拿不到。
排序的话,你可以实现Comparator接口,然后重写里面的排序方法,你想根据工资来排序的话,就可以利用两个工资相减来进行排序,然后调用Arrays.sort方法,就会帮你排好序的。

//然后是比较实现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{ }里重写吗?

ArrayList数组里可以存放任何内容的字符么,怎么排序
引用 9 楼 u012875881 的回复:
Quote: 引用 6 楼 xiangnan129 的回复:

你的emp没有定义,因为你前面定义是在if块里面所以后面拿不到。
排序的话,你可以实现Comparator接口,然后重写里面的排序方法,你想根据工资来排序的话,就可以利用两个工资相减来进行排序,然后调用Arrays.sort方法,就会帮你排好序的。

//然后是比较实现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接口。这样的话就可以排序了。
额,你这个排序好像还少了一个大于的判断吧,不然这样排序会有一点小问题吧


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明ArrayList数组里可以存放任何内容的字符么,怎么排序
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!