1.
定义一个Person类{name,age,job},初始化Person对象数组,有3个Person对象
//并age从大到小排序,提示,使用冒泡排序
public class Homework01 {
// 定义一个Person类{name,age,job},初始化Person对象数组,有3个Person对象
//并age从大到小排序,提示,使用冒泡排序
public static void main(String[] args) {
Person[] p = new Person[3];
p[0] = new Person("jack", 20, "老师");
p[1] = new Person("smith", 15, "老师");
p[2] = new Person("Mr.li", 28, "老师");
//这里需要一个Person类的对象,用这个对象来进行替换
// 不用新建一个对象,可以将该对象自空!!!
//这是值得学习一点,因我之前是直接声明了一个对象,
//声明的对象 temp = p[j + 1]; 将某一个同类对象赋值给对象是可以的
//但如果 p[i] = temp; 是将声明的对象赋值给 同类数组下标时,就会报错
//Person temp;
Person temp = null;
for (int i = 0; i < p.length - 1; i++) {
for (int j = 0; j < p.length - 1 - i; j++) {
//错误原因:
//这里要让从大到小排序,那么从大到小的排序 是大于还是小于呢
//从大到小,那么要这么想:当前一个对象中的数值 < 后一个时,将其两者替换位置
// if (p[i].getAge() < p[i + 1].getAge()) { 1.这里要使用j 来进行比较,因为此刻已经是二次循环当中
// p[i] = temp; 2.temp = p[i] temp临时变量要在前面,这才是把p[i]的值 赋值给 临时变量p[i]
// p[i] = p[i + 1];
// p[i + 1] = p[i]; 3.这里还是要将 p[i] 该为 temp。 因为此刻p[i]的值已经改变成i+1. 目前这种输入只会将3个对象的年龄都改为同一年龄
// if (p[j].getAge() < p[j + 1].getAge()) {
// temp = p[j];
// p[j] = p[j + 1];
// //p[j + 1] = p[j];
// p[j + 1] = temp;
// }
//正确:
if (p[j].getAge() < p[j + 1].getAge()) {
temp = p[j + 1];
p[j + 1] = p[j];
p[j] = temp;
}
}
}
for (int i = 0; i < p.length; i++) {
System.out.println(p[i]);
}
}
}
class Person {
private String name;
private int age;
private String job;
public Person(String name, int age, String job) {
this.name = name;
this.age = age;
this.job = job;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getJob() {
return job;
}
public void setJob(String job) {
this.job = job;
}
//这里我写了一个重新equlas方法,但其实并没有任何作用,因为该题是,对比三个对象的年龄,
//从大到小排比。 但数字为基本类型,其实就可以用 == 来比较,
//而我当时想着是三个对象,分配在不同的地址空间,无法进行对比,所以重写了equlas,让其为同一对象,
//但其实并不需要。java中 == 就可以对比其基本数据类型,并判断值是否相等
public boolean equals(Object obj){
//判断是否为同一个对象地址
// == : 判断基本数据类型时,则是判断值是否相同
// 判断引用数据类型时,则时判断两者的对象地址是否相同
if (this == obj) {
return true;
}
if (obj instanceof Person) {
// obj = (Person) obj;
if (this.job.equals(((Person) obj).job) || this.age == ((Person) obj).age
|| this.name.equals(((Person) obj).name)) {
return true;
}
}
return false;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
", job='" + job + '\'' +
'}';
}
}