初级类习题

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 + '\'' +
                '}';
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值