Java程序设计实验4---sdust

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);
    }
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值