package 蓝桥杯;
//对数组排序好简单,但是对自定义的对象该如何排序啊?由我告诉你,示例为对单个数据倒叙排序。
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;
//测试数据:1 3 1 84 34 5 87 3 6 0 0 7 0 34 1
public class test_sortclass {
public static void main(String[] args) {
Scanner reader=new Scanner(System.in);
PlatFrom[] platfroms=new PlatFrom[5];
for(int i=0;i<5;i++) {
int X=reader.nextInt();
int Y=reader.nextInt();
int Z=reader.nextInt();
platfroms[i]=new PlatFrom(X, Y, Z);
}
List<PlatFrom> pfList=new ArrayList<test_sortclass.PlatFrom>(Arrays.asList(platfroms[0],platfroms[1],platfroms[2],platfroms[3],platfroms[4]));
Collections.sort(pfList);
for( PlatFrom e: pfList) {
System.out.println(e.toString());
}
}
// 首先我们自定义一个对象,在算法中最好是都使用public
// 给内部类加个static,因为main方法是静态的。
// 在一个类的静态成员中去访问非静态成员之所以会出错是因为在类的非静态成员不存在的时候静态成员就已经存在了,访问一个内存中不存在的东西当然会出错。
static class PlatFrom implements Comparable<PlatFrom>{
private int X;
private int Y;
private int Z;
//构造方法,这个不懂的请自行看基础知识鸭。
public PlatFrom(int x,int y,int z) {
this.X=x;
this.Y=y;
this.Z=z;
}
//为了更好得显示数据(实际上为测试所需),我们重写toString方法
@Override
public String toString() {
return "X="+X+",Y="+Y+",Z="+Z+"。";
}
//get方法必须写,目的是后面get出来比较
public int getX() {
return X;
}
public int getY() {
return Y;
}
public int getZ() {
return Z;
}
//实现Comparable接口,重写接口方法
//如果指定的数与参数相等返回0;如果指定的数小于参数返回 -1;
//如果指定的数大于参数返回 1,执行交换,此时升序排序,倒序情况则相反。
@Override
public int compareTo(PlatFrom next) {
// return this.X.compareTo(next.getX());
// 报错:Cannot invoke compareTo(int) on the primitive type int
// compareTo()方法比较的字符串类型是否相等,XYZ为int类型。可以改为:
// if(this.Z==next.getZ())
// return 0;
// else if(this.Z>next.getZ())
// return -1;
// else return 1;
// 这种方法仍然不够简便,于是我:
return next.getZ()-this.Z;//为倒序排序,this比next大即返回-1不交换位置
}
}
}
输出结果:
Z实现了倒叙排序。