面向对象编程(三):接口与实现 实训答案

  • Post author:
  • Post category:其他


第1关:接口的定义与使用-学生还是老师

本关的编程任务是补全右侧代码片段中Begin至End中间的代码,具体要求如下:

定义一个Introduce接口,包括一个introduction()方法,输出格式见测试样例。

定义一个Student类和一个Teacher类实现Introduce接口。

package step1;

import java.util.Objects;
import java.util.Scanner;

public class StudentOrTeacher {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String string = scanner.next();
        Introduce p=null;
        if (Objects.equals(string, "学生")) {
            p = new Student();
            
        }
        else if (Objects.equals(string, "老师")) {
            p = new Teacher();
            
        }
        p.introduction();
    }
}

/********** Begin *********/
    interface Introduce {
        void introduction();
    }

class Student implements Introduce {
    @Override
    public void introduction() {
        System.out.println("我是一名学生!");
    }
}

class Teacher implements Introduce {

    @Override
    public void introduction() {
        System.out.println("我是一名老师!");
    }
}
/********** End *********/

第2关:接口应用:充电器接口的实现

本程序包含三个源文件,分别是:

Telephone.java:主类定义

ICharger.java:接口定义

Charger.java:实现接口的具体类的定义

你的任务是:

(1)熟读ICharger.java中的代码和测试结果,并仔细阅读Telephone中的代码。

(2)在上述前提下,在Telephone中begin-end区域补充完整代码,只需要添加一条代码即可。

(3)完成Charger的定义。

编程要求

本程序包含三个源文件,分别是:

Telephone.java:主类定义

ICharger.java:接口定义

Charger.java:实现接口的具体类的定义

你的任务是:

(1)熟读ICharger.java中的代码和测试结果,并仔细阅读Telephone中的代码。

(2)在上述前提下,在Telephone中begin-end区域补充完整代码,只需要添加一条代码即可。

(3)完成Charger的定义。

测试说明

平台会对你编写的代码进行测试,测试结果的格式如下:

请输入交流电压和当前手机电量:

220 47

已充电到52%

已充电到57%

已充电到62%

已充电到67%

已充电到72%

已充电到77%

已充电到82%

已充电到87%

已充电到92%

已充电到97%

已充电到100%

充电器停止充电

Telephone.java

package step1;

import java.util.Scanner;

public class Telephone {
	ICharger charger;
	private int currentEnergy;
	public Telephone() {
		//begin,请在begin-end之间添加一条语句,不要改动其他任何代码,否则为0分。
        charger = new Charger(); //接口回调		 
		//end
	}
	public static Scanner sc=new Scanner(System.in);
	public static void main(String[] args) {
		
		Telephone tel=new Telephone();
		System.out.println("请输入交流电压和当前手机电量:");
		float vol=sc.nextFloat();
		tel.currentEnergy=sc.nextInt();
		tel.beginCharge(vol);
		sc.close();
	}
	private void beginCharge(float vol) {
		if(charger.connectPowerline(vol)) {
			while(true) {
				currentEnergy=charger.doCharge(currentEnergy);
				if(currentEnergy==100) {
					break;
				}
			}
		}
	}

}

Charger.java

 //Charger.java ,请完成Charger的完整定义,使它满足主方法的输出内容和格式的要求。
 package guet;
 public class Charger implements ICharger {
    /**
     * 将充电器连接到交流电源上
     * @param voltage 交流电电压
     * @return 当voltage在[200-240]V范围时,返回true,否则返回false
     */
    @Override
    public boolean connectPowerline(float voltage) {
        if (voltage>=200 && voltage<=240){
            return true;
        }else {
            System.out.println("交流电压不在[200,240]范围,无法充电");
            return false;
        }
    }

    /**
     * 关电,停止充电
     */
    @Override
    public void powerOff() {
        System.out.println("充电器停止充电");
    }

    /**
     * 给手机充电,调用该方法1次,充电5%
     * @param currentEnergy 手机电池现有电量,[0-100]间的数
     * 若电量为100(满电),则停止充电,自动调用powerOff
     * @return 充电后的电池电量,若currentEnergy为10,则返回10+5=15
     */
    @Override
    public int doCharge(int currentEnergy) {
        if (currentEnergy>=0 && currentEnergy<=100){
            if(currentEnergy == 100){
                powerOff();
                return currentEnergy;
            }
            currentEnergy = currentEnergy+5;
            if(currentEnergy > 100){
                currentEnergy = 100;
                System.out.println("已充电到"+currentEnergy+"%");
                powerOff();
                return currentEnergy;
            }
            
            System.out.println("已充电到"+currentEnergy+"%");
            return currentEnergy;
        }
        return 0;
    }
}

ICharger.java

 package step3;
/**
 * 提供给充电设计公司的接口
 * @author guet.imagan
 *
 */
public interface ICharger {
	/**
	 * 将充电器连接到交流电源上
	 * @param voltage 交流电电压
	 * @return 当voltage在[200-240]V范围时,返回true,否则返回false
	 */
	boolean connectPowerline(float voltage);
	/**
	 * 关电,停止充电
	 */
	void powerOff();
	/**
	 * 给手机充电,调用该方法1次,充电5%
	 * @param currentEnergy 手机电池现有电量,[0-100]间的数
	 * 若电量为100(满电),则停止充电,自动调用powerOff
	 * @return 充电后的电池电量,若currentEnergy为10,则返回10+5=15
	 */
	int doCharge(int currentEnergy);
}

第3关:接口的继承-体育爱好

编程要求

本关的编程任务是补全右侧代码片段中Begin至End中间的代码,完成MyFavourateTeam类以实现其需要实现的接口,具体要求如下:

通过setSports()设置喜欢的体育赛事类型,如篮球、足球;

通过setTeam()设置支持的队伍,如洛杉矶湖人、皇家马德里等;

通过introduction()大声说出你喜欢的运动,和喜欢的球队,格式如下:“我最喜欢的体育运动是xxx,我最喜欢的球队是xxx”。(具体输入输出格式可参见测试样例)

评测说明

平台将自动编译补全后的代码,并生成若干组测试数据,接着根据程序的输出判断程序是否正确。

以下是测试样例:

测试输入:

篮球 洛杉矶湖人

预期输出:

我最喜欢的体育运动是篮球,我最喜欢的球队是洛杉矶湖人

package step2;

import java.util.Scanner;

public class SportsEvents {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String sports = scanner.next();
        String team = scanner.next();
        MyFavourateTeam myFavourateTeam = new MyFavourateTeam();
        myFavourateTeam.setSports(sports);
        myFavourateTeam.setTeam(team);
        myFavourateTeam.introduction();
    }
}

interface Sports {
    void setSports(String sports);
}

interface Team {
    void setTeam(String team);
}

interface ChooseTeam extends Sports, Team {
    void introduction();
}

/********** Begin *********/

class MyFavourateTeam implements ChooseTeam {
    private String sports;
    private String team;
    @Override
    public void setSports(String sports) {
        this.sports = sports;
    }

    @Override
    public void setTeam(String team) {
        this.team = team;
    }

    @Override
    public void introduction() {
        System.out.println("我最喜欢的体育运动是"+sports+",我最喜欢的球队是"+team);
    }
    
    
}

/********** End *********/

答案仅供参考,不对的还请指正,不懂的答疑时去问老师。



版权声明:本文为zhuyue_shenfeng原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。