做JAVA复习题(三)(程序设计题部分)

本文详细介绍了如何使用Java实现Runnable接口创建模拟车票购买线程,以及设计Student类及其equals、hashCode和toString方法。同时,展示了如何通过TreeSet和Comparator进行定制排序,以存储并输出特定格式的Student对象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. 采用实现java.lang.Runnable接口方式设计并实现模拟车票购买线程类TicketBooking,满足:
  1. 车票数量ticketNumber初始为100,购买者姓名name,分别为int和String类型
  2. 线程目标主体每间隔1000毫秒购买一次车票,并且将原来票数量做相应递减,输出购买者信息和购买车票数量和剩余车票数量信息。

代码如下

class TickerBooking implements Runnable
{
    private int ticketNumber = 100;
    private String name;

    public TickerBooking(String name) {
        this.name = name;
    }

    @Override
    public void run() {
        for (int i = 0;i<100;i++)
        {
            if (ticketNumber > 0)
            {
                System.out.println("name:"+this.name+","+"ticket left:"+this.ticketNumber--);
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

public class t2_5 {
    public static void main(String[] args) throws Exception
    {
        TickerBooking tk = new TickerBooking("Steve");
        new Thread(tk).start();
    }
}

运行结果:

name:Steve,ticket left:100
name:Steve,ticket left:99
name:Steve,ticket left:98
...
name:Steve,ticket left:0
  1. 设计一个Student类,满足:
  1. 成员变量为id和name,分别为int和String类型,访问权限为private
  2. 有参数构造方法
  3. 成员变量的getter类方法
  4. 重写从Object类继承的两个三个方法
    a) boolean equals(Object obj),两个Student对象equals就是其id相等
    b) int hashcode(),一个Student对象的hashcode就是其id
    c) String toString(),使得返回的对象信息为id:name形式。
    设计一个用于指定Student对象之间排序方法的StudentComparator类,满足:
  5. 实现java.util.Comparator接口
  6. 使得两个Student对象比较时,其方法int compare(Student s1,Student s2)
    a) 两个对象id相等时,返回0
    b) s1的id大于s2的id,返回-1
    c) s1 的id小于s2的id,返回1
    设计一个演示类TreeSetDemo类,满足:
  7. 主方法内构造一个用于存Student对象的TreeSet集合,其上对象元素的排序方法按照Comparator接口指定的排序方法排序,分别存Student对象(1,“张1”)、(2,“李4”)、(3,“王5”)、(3,“赵6”)
  8. 将集合元素输出
  9. 对程序结果予以必要的解释。
import java.util.Comparator;
import java.util.TreeSet;

class Student2_6
{
    private String name;
    private int id;

    public Student2_6(String name, int id)
    {
        this.name = name;
        this.id = id;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public boolean equals(Student2_6 obj)
    {

        return obj.getId() == this.getId();
    }

    public int hashcode()
    {
        return this.id;
    }

    @Override
    public String toString() {//重写toString
        return "(" + this.name + ',' + this.id + ')';
    }
}



public class t2_6 //TreeSetDemo
{
    public static void main(String[] args)
    {
        TreeSet<Student2_6> ts = new TreeSet<>(new Comparator<Student2_6>() {
            @Override
            public int compare(Student2_6 o,Student2_6 p) 
            {//重写compareTo
                return Integer.compare(p.getId(), o.getId());
            }
        });
        ts.add(new Student2_6("张1",1));
        ts.add(new Student2_6("李4",2));
        ts.add(new Student2_6("王5",3));
        ts.add(new Student2_6("赵6",3));
        System.out.println(ts);
    }
}

运行结果:

[(王5,3), (李4,2), (张1,1)]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值