JAVA有些地方的操作时真的真的麻烦,比如这个排序。。。C++ 简单多了
首先写出一个类,包括其数据域 以及 get 相应的值的函数,然后在同一个类文件里面写Comparator。完成你想要的排序方式
如:这里有对坐标的排序 (x,y) 先按照 x 升序,后按照 y 升序 的类
import java.util.Comparator;
public class Point {
private int x,y;
public Point(){
x = (int)(1+Math.random()*100);
y = (int)(1+Math.random()*100);
}
public int getx(){
return x;
}
public int gety(){
return y;
}
}
class CmpPointx implements Comparator<Point>{
public int compare(Point A,Point B){
if(A.getx() != B.getx())
return A.getx() - B.getx();//这样就是升序,B - A 的就是降序
return A.gety() - B.gety();
}
}
在主函数里面,就可以这样操作:
import java.util.*;
public class Main {
public static void main(String[] args){
//Scanner cin = new Scanner(System.in);
Point[] a = new Point[50];
for(int i = 0;i < 50;++ i){
a[i] = new Point();
}
System.out.println("sort by x");
Arrays.sort(a,new CmpPointx()); /// 这里要注意,不指定排序的数的范围,
//就是对所有的排序,假如你 new 的大小是100,只输入了前50个数,这样排序就会出现有指针抛空
///指定范围是这样。。 //Arrays.sort(a,0,25,new CmpPointx());
for(int i = 0;i < 50;++ i){
System.out.print(a[i].getx() + " " + a[i].gety() + " ");
if(i % 10 == 0 && i != 0) System.out.print("\n");
}
}
}