Java程序设计 北京大学 Week4互评作业

java程序设计mooc攻略

单元测验互评作业考试
week1测验2019冬期中测验
week2测验week2互评作业2019冬期末测验
week3测验week3互评作业
week4测验week4互评作业
week5测验week5互评作业
week6测验week6互评作业
week7测验week7互评作业
week8测验week8互评作业
week9测验week9互评作业
week10测验week10互评作业
week11测验吃不消,我自己是github上找了个项目上去

编写一个小的程序,其中定义一些接口、类、抽象类,定义它们的成员(字段及方法), 要求使用使用setter/getter, static, final, abstract,@Override等语法要素,并写一个main函数来使用它们。这些类、接口可以是围绕以下选题之一

飞翔世界:来一次飞翔接力(即多个可飞翔的对象依次调用);

动物世界:来一次吃西瓜大赛;

图书馆:模拟一天的借阅过程;

学校:模拟选课过程;

等等

要求写个简要说明。

文件结构

.
├── Game.java
├── animals
│   ├── Animal.java
│   ├── Elephant.java
│   ├── Lion.java
│   ├── Monkey.java
│   ├── Pig.java
│   └── Rabbit.java
└── prop
    ├── Plate.java
    ├── Record.java
    └── Watermelon.java

每个文件的代码

Game.java

import animals.*;
import prop.Plate;
import prop.Record;
import prop.Watermelon;

import java.util.Arrays;
import java.util.Random;
import java.util.Vector;

public class Game {

    public static void main(String[] args) {
        System.out.println("观众朋友们,大家好,一年一度的吃西瓜大赛又开始了。");
        System.out.println("让我们欢迎我们今年的选手:");
        System.out.println("");
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) { }
        Vector<Animal> players = new Vector<Animal>();
        players.add(new Rabbit(10));
        players.add(new Pig(30));
        players.add(new Elephant(28));
        players.add(new Monkey(18));
        players.add(new Lion(24));
        for (Animal each : players) {
            System.out.println(each.getName() + ": " + each.say());
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) { }
        }
        Plate<Watermelon> p;
        Record[] record = new Record[5];
        int index = 0;
        System.out.println("");
        for (Animal each : players) {
            System.out.println("好的,接下来有请" + each.getName() + "开始吃西瓜,计时开始");
            p = new Plate<>(10);
            Random seed = new Random(1);
            for (int i = 0; i < 10; i++) {
                p.add(new Watermelon(seed.nextInt(20)));
            }
            for (int i = 0; i < 10; i++) {
                System.out.print(".");
                System.out.flush();
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) { }
            }
            record[index] = new Record(each.getName(), each.eatWatermelon(p));
            System.out.println("");
            System.out.printf("总共花费了%.2fs的时间。非常不错的成绩\n", record[index].getTime());
            System.out.println("");
            index++;
        }
        Arrays.sort(record);
        System.out.println("接下来公布成绩:");
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) { }
        for (int i = 0; i < 5; i++) {
            System.out.print("第" + (i + 1) + "名是");
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) { }
            System.out.println(record[i].getName());
        }
    }

}

prop/Plate.java

package prop;

import java.util.concurrent.ArrayBlockingQueue;

public class Plate<T> {
    private ArrayBlockingQueue<T> container;

    public Plate(int limits) {
        this.container = new ArrayBlockingQueue<T>(limits);
    }

    public boolean add(T one) {
        return container.add(one);
    }

    public T reduce() {
        return container.poll();
    }

    public boolean isEmpty() {
        return container.isEmpty();
    }

    public T getOne() {
        return container.peek();
    }

}

prop/Record.java

package prop;

public class Record implements Comparable<Record>{

    public Record(String name, double time) {
        this.name = name;
        this.time = time;
    }

    public String getName() {
        return name;
    }

    public double getTime() {
        return time;
    }

    @Override
    public int compareTo(Record o) {
        return Double.compare(this.time,o.time);
    }

    private String name;
    private Double time;

}

prop/Watermelon.java

package prop;

public class Watermelon {

    private final int size;

    public int getSize() {
        return size;
    }

    public Watermelon(int size) {
        this.size = size;
    }

}

aninals/Animals.java

package animals;

import prop.Plate;
import prop.Watermelon;

public abstract class Animal {
    abstract public String say();

    abstract public int getEatSpeed();
    public double eatWatermelon(Plate<Watermelon> plate) {
        int sum = 0;
        while (!plate.isEmpty()) {
            Watermelon w = plate.reduce();
            sum += w.getSize();
        }
        return sum*1.0/getEatSpeed();
    }

    abstract public String getName();
}

animals/Elephant.java

package animals;

public class Elephant extends Animal {

    public Elephant(int eatSpeed) {
        name = "大象";
        this.eatSpeed = eatSpeed;
    }

    @Override
    public String getName() {
        return name;
    }

    @Override
    public int getEatSpeed() {
        return eatSpeed;
    }

    @Override
    public String say() {
        return "我的鼻子可以卷起许多西瓜。";
    }

    final private String name;
    private int eatSpeed;

}

aninals/Lion.java

package animals;

public class Lion extends Animal {

    public Lion(int eatSpeed) {
        name = "狮子";
        this.eatSpeed = eatSpeed;
    }

    @Override
    public String getName() {
        return name;
    }

    @Override
    public int getEatSpeed() {
        return eatSpeed;
    }

    @Override
    public String say() {
        return "我是森林之王。";
    }

    final private String name;
    private int eatSpeed;

}

aninals/Monkey.java

package animals;

public class Monkey extends Animal {

    public Monkey(int eatSpeed) {
        name = "猴子";
        this.eatSpeed = eatSpeed;
    }

    @Override
    public String getName() {
        return name;
    }

    @Override
    public int getEatSpeed() {
        return eatSpeed;
    }

    @Override
    public String say() {
        return "我要让你看看我吃的有多快。";
    }

    final private String name;
    private int eatSpeed;

}

aninals/Pig.java

package animals;

public class Pig extends Animal {

    public Pig(int eatSpeed) {
        name = "猪";
        this.eatSpeed = eatSpeed;
    }

    @Override
    public String getName() {
        return name;
    }

    @Override
    public int getEatSpeed() {
        return eatSpeed;
    }

    @Override
    public String say() {
        return "我有一个超级大的胃。";
    }

    final private String name;
    private int eatSpeed;

}

aninals/Rabbit.java

package animals;

public class Rabbit extends Animal {

    public Rabbit(int eatSpeed) {
        name = "兔子";
        this.eatSpeed = eatSpeed;
    }

    public String getName() {
        return name;
    }

    @Override
    public int getEatSpeed() {
        return eatSpeed;
    }

    @Override
    public String say() {
        return "我喜欢胡萝卜。";
    }

    final private String name;
    private int eatSpeed;

}

程序启动

运行Game.java的main函数。

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值