定义一个Person类,包含姓名(name)、身高(height)、体重(weight),以及speak()方法,该方法的功能是,输出自己的身高和体重信息。
Person类实现Comparable接口,实现比较两个Person对象的大小,比较规则是:身高和体重各占50%权重,以综合计算身高和体重之后的值作为判断对象大小的依据。
最后,定义一个测试类,生成一个数组,该数组有6个元素,每个元素类型是Person,调用Arrays.sort方法对该数组排序。
按照以上描述,以及输出样例的结果,完成程序代码的填写。
package hello;
import java.util.Arrays;
public class Person implements Comparable<Person> {
private String name;
private float height, weight;
public Person(String name, float height, float weight) {
this.name=name;
this.height=height;
this.weight=weight;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public float getHeight() {
return height;
}
public void setHeight(float height) {
this.height = height;
}
public float getWeight() {
return weight;
}
public void setWeight(float weight) {
this.weight = weight;
}
public void speak() {
System.out.println("I am "+name+",my height "+height+",my weight "+weight);
}
public int compareTo(Person o) {
float s1=this.height+this.weight;
float s2=o.height+o.weight;
if(s1>s2) {
return 1;
}
if(s1<s2) {
return -1;
}
return 0;
}
public String toString() {
return "Person [name="+name+",height="+height+",weight="+weight+"]";
}
}
测试代码:
package hello;
import java.util.Arrays;
public class TestCompare {
public static void main(String[] args) {
int i;
Person ps[] = new Person[6];
ps[0] = new Person("zhangsan", 170, 110);
ps[1] = new Person("lisi", 168, 120);
ps[2] = new Person("wangwu", 165, 115);
ps[3] = new Person("zhaoliu", 172, 121);
ps[4] = new Person("zhouqi", 160, 100);
ps[5] = new Person("zhengba", 166, 119);
System.out.println("array sort before:");
for (i = 0; i < ps.length; i++) {
ps[i].speak();
}
Arrays.sort(ps); // call sort method
System.out.println("\narray sort after:");
for (i = 0; i < ps.length; i++) {
System.out.println(ps[i]);
}
}
}
知识扩充:
接口comparable是java自带的接口,里面只有一个方法compareTo();
实现接口时需要实现接口中的方法compareTo()
例如此题:
public int compareTo(Person o) {
float s1=this.height+this.weight;
float s2=o.height+o.weight;
if(s1>s2) {
return 1;
}
if(s1<s2) {
return -1;
}
return 0;
}
如果返回值等于零:s1=s2
返回值大于零则s1>s2
返回值小于于零则s1<s2