定义一个运动员(Sportsman)类,包含姓名(name)、跳高(highJump)、跳远(longJump),鞍马(sideHorse)属性以及speak()方法,该方法的功能是,输出自己的相关信息。
Sportsman类实现Comparable接口,实现比较两个Sportsman对象的大小,比较规则是:跳高占20%权重,跳远占30%权重,鞍马占50%权重,以综合计算三项权重和之后的值作为判断对象大小的依据。
最后,定义一个测试类,生成一个数组,该数组有6个元素,每个元素类型是Sportsman,调用Arrays.sort方法对该数组排序。 按照以上描述,以及输出样例的结果,完成程序代码的填写。
【输入形式】
无
【输出形式】
数组排序前以及排序后的结果。
【样例输入】
无
【样例输出】
array sort before:
I am zhangsan,my highJump 90.0,my longJump 95.0,my sideHorse 92.0
I am lisi,my highJump 91.0,my longJump 92.0,my sideHorse 95.0
I am wangwu,my highJump 95.0,my longJump 91.0,my sideHorse 93.0
I am zhaoliu,my highJump 92.0,my longJump 94.0,my sideHorse 90.0
I am zhouqi,my highJump 89.0,my longJump 90.0,my sideHorse 88.0
I am zhengba,my highJump 86.0,my longJump 92.0,my sideHorse 93.0
array sort after:
Sportsman [name=zhouqi,highJump=89.0,longJump=90.0,sideHorse=88.0]
Sportsman [name=zhengba,highJump=86.0,longJump=92.0,sideHorse=93.0]
Sportsman [name=zhaoliu,highJump=92.0,longJump=94.0,sideHorse=90.0]
Sportsman [name=zhangsan,highJump=90.0,longJump=95.0,sideHorse=92.0]
Sportsman [name=wangwu,highJump=95.0,longJump=91.0,sideHorse=93.0]
Sportsman [name=lisi,highJump=91.0,longJump=92.0,sideHorse=95.0]
import java.util.Arrays;
class Sportsman implements Comparable<Sportsman> {
private String name;
private float highJump, longJump, sideHorse;
public Sportsman(String name, float a, float b, float c) {
setName(name);
setHeight(a);
setWeight(b);
setScore(c);//写入姓名等信息,也可以用this.运算
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public float getHeight() {
return highJump;
}
public void setHeight(float height) {
this.highJump = height;
}
public float getWeight() {
return longJump;
}
public void setWeight(float weight) {
this.longJump = weight;
}
public float getScore() {
return sideHorse;
}
public void setScore(float score) {
this.sideHorse = score;
}
public void speak() {
System.out.println("I am "+name+",my highJump "+highJump+",my longJump "+longJump+",my sideHorse "+sideHorse);
//按要求写明speak的输出语句
}
以下为重点,重写object类里的compareTo
//重点 一定要有大于小于等于三种情况
public int compareTo(Sportsman o) {
if(this.highJump*0.2+this.longJump*0.3+this.sideHorse*0.5>o.highJump*0.2+o.longJump*0.3+o.sideHorse*0.5){
return 1;
}
else if (this.highJump*0.2+this.longJump*0.3+this.sideHorse*0.5<o.highJump*0.2+o.longJump*0.3+o.sideHorse*0.5){
return -1;
}
else {
return 0;
}
}
}
public String toString(){
return "Sportsman [name="+name+",highJump="+highJump+",longJump="+longJump+",sideHorse="+sideHorse+"]";
}//主函数中println该对象时直接调用该toString返回的语句
}
以下为主函数
public class TestCompare {
public static void main(String[] args) {
int i;
Sportsman ps[] = new Sportsman[6];
ps[0] = new Sportsman("zhangsan", 90, 95, 92);
ps[1] = new Sportsman("lisi", 91, 92, 95);
ps[2] = new Sportsman("wangwu", 95, 91, 93);
ps[3] = new Sportsman("zhaoliu", 92, 94, 90);
ps[4] = new Sportsman("zhouqi", 89, 90, 88);
ps[5] = new Sportsman("zhengba", 86, 92, 93);
System.out.println("array sort before:");
for (i = 0; i < ps.length; i++) {
ps[i].speak();
}
Arrays.sort(ps);//调用该语句来进行排序
System.out.println("\narray sort after:");
for (i = 0; i < ps.length; i++) {
System.out.println(ps[i]);
}
}
}
在书学compareTo时一定要注意三种return情况,如果只有两种即无法得到正确结果。