java程序设计mooc攻略
编写一个小的程序,其中定义一些接口、类、抽象类,定义它们的成员(字段及方法), 要求使用使用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函数。