6-47 图书和音像租赁 (20 分)
图书和音像店提供出租服务,包括图书和DVD的出租。图书包括书名(String,一个词表示)和价格(double),DVD包括片名(String,一个词表示)。它们都是按天出租,但租金计算方式却不同,图书的日租金为图书价格的1%,DVD的日租金为固定的1元。构造图书和DVD类的继承体系,它们均继承自Media类,且提供方法getDailyRent()返回日租金,构造音像店类MediaShop,提供静态函数double calculateRent(Media[] medias, int days)。 在main函数中构造了Media数组,包含图书和DVD的对象,调用calculateRent方法得到并输出租金,保留小数点两位
输入描述:
待租图书和DVD的数量
图书和DVD的详细信息
租借天数
输出描述:
总的租金
裁判测试程序样例:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
Media[] ms = new Media[n];
for (int i=0; i<n; i++) {
String type = sc.next();
if (type.equals("book")) {
ms[i] = new Book(sc.next(), sc.nextDouble());
}else {
ms[i] = new DVD(sc.next());
}
}
double rent = MediaShop.calculateRent(ms, sc.nextInt());
System.out.printf("%.2f", rent);
}
}
/* 请在这里填写答案 */
输入样例:
5
book Earth 25.3
book Insights 34
dvd AI
dvd Transformer
book Sun 45.6
20
输出样例:
60.98
Accepted Code
abstract class Media {
String name;
double money;
double price;
abstract double getDailyRent();
Media(String name, double price) {
this.name = name;
this.price = price;
money = 0;
}
Media(String name) {
this.name = name;
price = 0;
money = 0;
}
}
class Book extends Media {
Book(String name, double price) {
super(name, price);
}
double getDailyRent() {
return price * 0.01;
}
}
class DVD extends Media {
DVD(String name) {
super(name);
}
double getDailyRent() {
return 1;
}
}
class MediaShop {
public static double calculateRent(Media[] medias, int days) {
double money = 0;
for (int i = 0; i < medias.length; ++i) {
for (int j = 0; j < days; ++j) {
money += medias[i].getDailyRent();
}
}
return money;
}
}
6-48 动物体系 (20 分)
基于继承关系编写一个动物体系,具体的动物包含小狗和小猫。每只动物都有名字和颜色,都能够做自我介绍(introduce)。此外,小狗有智商属性(整数),能接飞盘(catchFrisbee(),方法体内输出一行“catch frisbee”即可),小猫有眼睛颜色属性,能抓老鼠(catchMouse(),方法体内输出一行“catch mouse”即可)。各种小动物自我介绍时均介绍自己的姓名和颜色,此外,小狗应介绍自己的智商,小猫应介绍自己的眼睛颜色。小狗介绍时输出”My name is xxx, my color is xxx, my IQ is xxx”, 小猫介绍时输出“My name is xxx, my color is xxx, my eyecolor is xxx” 构造类TestAnimal,提供静态函数introduce(Animal),对参数动物自我介绍。提供静态函数action(Animal),根据参数对象的实际类型进行活动,如果是小狗,则让其接飞盘,如果是小猫,则让其抓老鼠。 Main函数中,根据动物类型构造动物,并调用TestAnimal中的方法进行自我介绍(introduce)和活动(action)
输入描述:
动物类型 动物名称 动物颜色 动物其他属性 如 1 猫名称 猫颜色 猫眼睛颜色 2 狗名称 狗颜色 狗的智商
输出描述:
自我介绍 活动
裁判测试程序样例:
import java.util.Scanner;
/*你的代码被嵌在这里 */
public class Main{
public static void main(String args[]) {
Scanner s = new Scanner (System.in);
int i = s.nextInt();
Animal a = null;
if (i==1) {
a = new Cat(s.next(), s.next(), s.next());
} else if (i==2) {
a = new Dog(s.next(), s.next(), s.nextInt());
}
TestAnimal.introduce(a);
TestAnimal.action(a);
}
}
输入样例:
在这里给出一组输入。例如:
1 Mikey white blue
输出样例:
在这里给出相应的输出。例如:
My name is Mikey, my color is white, my eyecolor is blue
catch mouse
Accepted Code
class TestAnimal {
public static void introduce(Animal a) {
a.introduce();
}
public static void action(Animal a) {
a.action();
}
}
abstract class Animal {
String name;
String color;
abstract void introduce();
abstract void action();
Animal(String name, String color) {
this.color = color;
this.name = name;
}
}
class Dog extends Animal {
int IQ;
Dog(String name, String color, int IQ) {
super(name, color);
this.IQ = IQ;
}
@Override
void introduce() {
System.out.println("My name is " + name + ", my color is " + color + ", my IQ is " + IQ);
}
@Override
void action() {
this.catchFrisbee();
}
void catchFrisbee() {
System.out.println("catch frisbee");
}
}
class Cat extends Animal {
String eyesColor;
Cat(String name, String color, String eyesColor) {
super(name, color);
this.eyesColor = eyesColor;
}
void catchMouse() {
System.out.println("catch mouse");
}
@Override
void introduce() {
System.out.println("My name is " + name + ", my color is " + color + ", my eyecolor is " + eyesColor);
}
@Override
void action() {
this.catchMouse();
}
}
6-49 设计一个Duck类及其子类 (10 分)
设计一个Duck类和它的两个子类RedheadDuck和MallardDuck。裁判测试程序中的Main类会自动提交。
类的定义:
//Duck类的定义
class Duck { }
//RedheadDuck类的定义
class RedheadDuck extends Duck { }
//MallardDuck类的定义
class MallardDuck extends Duck { }
裁判测试程序样例:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scanner=new Scanner(System.in);
Duck rduck = new RedheadDuck();
rduck.display();
rduck.quack();
rduck.swim();
rduck.fly();
Duck gduck = new MallardDuck();
gduck.display();
gduck.quack();
gduck.swim();
gduck.fly();
}
}
/* 请在这里填写答案 */
输入样例:
在这里给出一组输入。例如:
无
输出样例:
在这里给出相应的输出。例如:
我是一只红头鸭
我会呱呱呱
我会游泳
我会飞
我是一只绿头鸭
我会呱呱呱
我会游泳
我会飞
Accepted Code
//Duck类的定义
abstract class Duck {
abstract void display();
abstract void quack();
abstract void swim();
abstract void fly();
}
//RedheadDuck类的定义
class RedheadDuck extends Duck {
@Override
void display() {
System.out.println("我是一只红头鸭");
}
@Override
void quack() {
System.out.println("我会呱呱呱");
}
@Override
void swim() {
System.out.println("我会游泳");
}
@Override
void fly() {
System.out.println("我会飞");
}
}
//MallardDuck类的定义
class MallardDuck extends Duck {
@Override
void display() {
System.out.println("我是一只绿头鸭");
}
@Override
void quack() {
System.out.println("我会呱呱呱");
}
@Override
void swim() {
System.out.println("我会游泳");
}
@Override
void fly() {
System.out.println("我会飞");
}
}
7-46 打球过程 (20 分)
利用模板方法来构造相关类实现下述过程: 各种球类的玩法虽然不同,但是球类比赛的过程是类似的,都包含如下几个步骤: 1球员报道–>2比赛开始–>3比赛–>4比赛结束–>5公布比赛成绩,且其中1 2 4步相同 第3步根据球类不同,玩法不同,第5步根据得分不同,公布方式结果不同 构造类BallMatch表示球类比赛,包含方法compete表示真个比赛过程 构造各个比赛过程的函数checkin,start,play,end,annouceResult 打印信息如下: now checking in now starting now playing football now ending now annoucing result: 2-3 构造类FootballMatch和BasketBallMatch,实现具体的比赛过程。
在main函数中,读入整数i,如果为1,则构造一个足球比赛过程,如果为2则构造一个篮球比赛过程 打印比赛过程
输入格式:
比赛类型 比分
输出格式:
比赛过程信息
输入样例:
在这里给出一组输入。例如:
1 2-3
输出样例:
在这里给出相应的输出。例如:
now checking in
now starting
now playing football
now ending
now annoucing result: 2-3
Accepted Code
import java.lang.*;
import java.util.*;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scanner=new Scanner(System.in);
if (scanner.nextInt() == 1) {
BallMatch ballMatch = new FootBallMatch(scanner.next());
ballMatch.compete();
} else {
BallMatch ballMatch = new BasketBallMatch(scanner.next());
ballMatch.compete();
}
}
}
abstract class BallMatch {
void compete() {
this.checkin();
this.start();
this.play();
this.end();
this.annouceResult();
}
void checkin(){
System.out.println("now checking in");
}
void start() {
System.out.println("now starting");
}
abstract void play();
void end() {
System.out.println("now ending");
}
abstract void annouceResult ();
}
class FootBallMatch extends BallMatch {
String score;
FootBallMatch(String score) {
this.score = score;
}
@Override
void play() {
System.out.println("now playing football");
}
@Override
void annouceResult() {
System.out.println("now annoucing result: " + score);
}
}
class BasketBallMatch extends BallMatch {
String score;
BasketBallMatch(String score) {
this.score = score;
}
@Override
void play() {
System.out.println("now playing basketball");
}
@Override
void annouceResult() {
System.out.println("now annoucing result: " + score);
}
}