华为OJ--称重小白鼠

/*根据重量排序后,输出帽子颜色
* 举例: 5只小白鼠,重量分别为15 30 5 9 30,帽子颜色依次为CL_RED, CL_BLUE, CL_BLUE, CL_YELLOW, CL_GRAY,
* 则排序后的输出的帽子颜色序列应该为CL_BLUE, CL_YELLOW, CL_RED, CL_BLUE, CL_GRAY。
如果没有小白鼠,输出null。
输入参数:小白鼠数组

*/


方法一:

Demo.java

	public static MOUSE_COLOR[] sortMouse(Mouse[] mouse )
	{
		if(mouse == null)
		{
			return null;			
		}
   
		Comparator<Mouse> compare = new Comparator<Mouse>()
		{
			@Override
			public int compare(Mouse o1, Mouse o2) {
				// TODO Auto-generated method stub
				if(o1.weight > o2.weight)
				{
					return 1;
				}
				else if(o1.weight < o2.weight)
				{
					return -1;
				}
				else
				{
					return 0;
				}
			}
			
		};
		Arrays.sort(mouse,compare);
       
		MOUSE_COLOR[] result = new MOUSE_COLOR[mouse.length];
		
		for(int i = 0; i < mouse.length; i++)
		{
			result[i] = mouse[i].color;
		}		
		return result;
	}
	

----------------------------------------------------------------------------------------------------------------------------------------------------------

方法二:

Demo.java

	public static MOUSE_COLOR[] sortMouse(Mouse[] mouse )
	{
		if(mouse == null)
		{
			return null;			
		}
   
		Arrays.sort(mouse);
       
		MOUSE_COLOR[] result = new MOUSE_COLOR[mouse.length];
		
		for(int i = 0; i < mouse.length; i++)
		{
			result[i] = mouse[i].color;
		}		
		return result;
	}
Mouse.java

public class Mouse implements Comparable<Mouse>{

	public int weight;
	public MOUSE_COLOR color;	
	public Mouse()
	{
		
	}
	public Mouse(int weight,MOUSE_COLOR color)
	{
		this.weight =weight;
		this.color = color;
	}
	@Override
	public int compareTo(Mouse o) {
		// TODO Auto-generated method stub
		if(this.weight > o.weight)
		{
			return 1;
		}
		else if(this.weight < o.weight)
		{
			return -1;
		}
		else
		{
			return 0;
		}
	}

}
上述方法二的代码在OJ平台上运行时会报错误, FindBugs 信息 :EQ_COMPARETO_USE_OBJECT_EQUALS。

因为在PriorityQueue.remove方法中,1.5使用的是compareTo方法,而1.6使用的是equals方法,为保证环境升级的时候,受影响最小,需要遵守约定(x.compareTo(y)==0) == (x.equals(y))。即在compareTo函数中return 0时,需要调用equals方法返回true。
解决办法:

1.Right click on the class

2.Select Source

3.Generate hashCode() and equals().


-------------------------------------------------------------------------------------------------------------------------------------------------

总结:

类对象数组排序:

方法一: 调用Arrays的一个方法public static <T> void sort(T[] a, Comparator<? super T> c)。后面的参数需要新建一个Comparator对象。

方法二:让对象类实现comparable接口,覆写comparable函数,里面用私有数据来比较大小。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值