1086: 【基础】精挑细选的钢管

Description:

小王是公司的仓库管理员,一天,他接到了这样一个任务:从仓库中找出一根钢管。这听起来不算什么,但是这根钢管的要求可真是让他犯难了,要求如下:

1、 这根钢管一定要是仓库中最长的;
2、 这根钢管一定要是最长的钢管中最细的;
3、 这根钢管一定要是符合前两条的钢管中编码最大的(每根钢管都有一个互不相同的编码,越大表示生产日期越近)。

今天刷算法题时,看到这道题,心血来潮想要创建一个钢管类来做,java是面对对象的语言,总不能每次都用C语言一样的思路,接下来就是各种百度,查看别人的代码,终于写出了人生最长的一段代码。
先写类,同时为了后面可以排序,继承了Serializable和Comparable接口,还学会了@Override的使用。

import java.util.*;
import java.io.Serializable;
class pipe implements Serializable, Comparable<pipe>{
	private  long num;
	private  Integer length;
	private  int coarse;
	public pipe(int length,int coarse,int num) {
		this.num=num;
		this.length =length;
		this.coarse=coarse;
	}//构造方法
	public long getnum() {
		return num;
	}
	public int getlength() {
		return length;
	}
	public int getcoarse() {
		return coarse;
	}
	@Override
	/*@Override是伪代码,表示重写(当然不写也可以),不过写上可以让编译器检查验证
	 @Override下面的方法名是否是你父类中所有的,如果没有则报错。
	 没有写上@Override,如果写错方法名,编译器会以为是子类自己增加个新的方法*/
	public int compareTo(pipe o) {
		return this.length.compareTo(o.getlength());
	}
	@Override
	public String toString() {
        return Long.toString(num);
    }//用于输出
}

然后这时候发现我重写的compareTo();方法只能根据长度排序,而题意是要求根据三个条件排序,于是又写了个继承于Comparator类的EmpComparator子类用来排序。

class EmpComparator implements Comparator<pipe> {
	 
	@Override
	public int compare(pipe p1,pipe p2) {
		  int b = 0;
          //按长度升序排列
          int a = p1.getlength() - p2.getlength();
          if (a != 0) {
             b= (a < 0) ? 2: -1;
          } else {
              //按薪水降序排列
              a = p1.getcoarse() - p2.getcoarse();
              if (a != 0) {
                  b= (a > 0) ? 1 : -2;
              }else {
                  //按编号升序排列
                  a = (int) (p1.getnum() - p2.getnum());
                  if (a != 0) {
                      b = (a < 0) ? 1 : -2;
                  }
          }
          }
          return b;
   	}
 }

最后验证一下:

public class Main{
	//private static final Logger LOGGER = LoggerFactory.getLogger(Main.class);
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		pipe[] a = new pipe[scan.nextInt()];
		List<pipe> list = new ArrayList<pipe>();
		for(int i=0;i<a.length;i++) {
			a[i] =new pipe(scan.nextInt(),scan.nextInt(),scan.nextInt());
			list.add(a[i]);//把对象添加进容器
		}
		Collections.sort(list,new EmpComparator());//排序
		System.out.print(list.get(0));
	}
}

最后附上结果:在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值