栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java面向对象程序设计4继承与多态

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java面向对象程序设计4继承与多态

6-6 使用继承,实现“剪刀石头布的游戏” 如果写到这道题恭喜你你中奖了,让你体会体会人间疾苦,哈哈哈哈

分数 10

全屏浏览题目

切换布局

作者 秋

单位 许昌学院

使用继承,实现“剪刀石头布的游戏”。

小时候很喜欢玩一个游戏,“剪刀石头布”,可以是出拳的形式,或跳格子的形式。现在我们用计算机来玩这个游戏。
电脑用随机数产生剪刀石头布,游戏玩家用输入1,2,3的方式出拳。
游戏玩家输入1或2或3,分别 代表剪刀(1)石头(2)布(3)。
电脑胜出时,显示"Winner is computerPlayer."
游戏玩家胜出时,显示“Winner is personPlayer.”
平局时显示"A Draw."

函数接口定义:

根据主方法内容,实现三个类的定义,分别是是ComputerPlayer、PersonPlayer、Game类。 其中ComputerPlayer、PersonPlayer要继承Player类。 根据主方法中的用法,实现Game类。

裁判测试程序样例:
import java.util.Scanner;

class Player{
    String name;
    Player(String name){
        this.name = name;
    }
    int show() {  //出拳方法
        int show = ( int ) (Math.random() * 10 ) %3  +1;
        return show ;
    }
}


public class Main {

    public static void main(String[] args) {
        ComputerPlayer c = new ComputerPlayer ("computer");
        PersonPlayer  p = new PersonPlayer("player ") ;
        Game g = new Game( c ,p );
        g.start();        
    }

}

输入样例:
2

输出样例:
A Draw.

代码长度限制

16 KB

正确代码
package pta代码;

import java.util.*;

class Player {
	String name;

	Player(String name) {
		this.name = name;
	}

	int show() { // 出拳方法
		int show = (int) (Math.random() * 10) % 3 + 1;
		return show;
	}
}


class ComputerPlayer extends Player {
	static String name = null;

	public ComputerPlayer() {
		super(name);
	}

	public ComputerPlayer(String name) {
		super(name);
		this.name = name;
	}

	public int show() {
		int n = (int) (Math.random() * 10) % 3 + 1;
		return n;
	}
}

class PersonPlayer extends Player {
	int n;
	static String name = null;

	public PersonPlayer() {
		super(name);
	}

	public PersonPlayer(String name) {
		super(name);
		this.name = name;
	}

	public int show() {
		Scanner cin = new Scanner(System.in);
		this.n = cin.nextInt();
		return this.n;
	}
}

class Game {
	ComputerPlayer com;
	PersonPlayer pe;

	public Game(ComputerPlayer c, PersonPlayer p) {
		this.com = com;
		this.pe = pe;
	}

	public void start() {
		this.com = new ComputerPlayer();
		this.pe = new PersonPlayer();
		int c = com.show();
		int p = pe.show();
		if (p == 1) {
			if (c == 1) {
				System.out.println("A Draw.");
			} else if (c == 2) {
				System.out.println("Winner is personPlayer.");
			} else
				System.out.println("Winner is computerPlayer.");
		} else if (p == 2) {
			if (c == 1) {
				System.out.println("Winner is computerPlayer.");
			} else if (c == 2) {
				System.out.println("A Draw.");
			} else
				System.out.println("Winner is personPlayer.");
		} else if (p == 3) {
			if (c == 1) {
				System.out.println("Winner is personPlayer.");
			} else if (c == 2) {
				System.out.println("Winner is computerPlayer.");
			} else
				System.out.println("A Draw.");
		}
	}
}

public class Main {

	public static void main(String[] args) {
		ComputerPlayer c = new ComputerPlayer("computer");
		PersonPlayer p = new PersonPlayer("player ");
		Game g = new Game(c, p);
		g.start();
	}

}

时间限制

400 ms

内存限制

6-8 设计门票(抽象类)

分数 10

全屏浏览题目

切换布局

作者 殷伟凤

单位 浙江传媒学院

某学校举办一次活动,需要凭票参加,每张票都有票号和售价。
门票分为3类:当天票,预订票和学生预订票。
当天票价格50。
预订票,提前时间>10天的,售价30;提前10天以内的,售价40;
学生预订票,提前时间>10天的,售价15;提前10天以内的,售价20。

(1)编写抽象类Ticket类,包含以下成员
①属性:
number:私有,int型,表示票号;
②方法:

  1. Ticket(int number), 构造方法,初始化票号;
  2. int getPrice(), 返回票价,抽象方法;
  3. String toString(),返回一个字符串,格式为“Number:票号,Price:票价”。

(2)编写Ticket类的子类WalkupTicket,表示当天票,包含以下成员
①方法:
1)WalkupTicket(int number), 构造方法,初始化票号;
2)int getPrice(), 返回票价50。

(3)编写Ticket类的子类AdvanceTicket,表示预订票,包含以下成员
①属性:

  1. leadTime:私有,int型,表示提前预订的天数;
    ②方法:
  2. AdvanceTicket(int number,int leadTime), 构造方法,初始化票号和提前天数;
  3. int getPrice(), 如果提前天数>10天,票价30,否则,票价40。

(4)编写AdvanceTicket类的子类StudentAdvanceTicket,表示学生预订票,包含以下成员
①属性:

  1. height:私有,int型,表示购票学生的身高(单位厘米);
    ②方法:
    1)StudentAdvanceTicket(int number,int leadTime,int height), 构造方法,初始化票号、提前天数和身高;
    2)int getPrice(),

    如果学生身高>120:提前天数>10天,票价20,否则,票价30。
    如果学生身高<=120,票价是身高120以上学生的对折。

裁判测试程序样例:
public class Main{
    public static void main(String args[]) {
        Scanner in = new Scanner(System.in);
        Ticket a = new WalkupTicket(in.nextInt());
        System.out.println(a.toString());
        Ticket b = new AdvanceTicket(in.nextInt(), in.nextInt());
        System.out.println(b.toString());
        Ticket c = new StudentAdvanceTicket(in.nextInt(), in.nextInt(), in.nextInt());
        System.out.println(c.toString());
    }
}


按如下框架设计类后提交即可:

abstract class Ticket {
……
}
class WalkupTicket extends Ticket {
……
}
class AdvanceTicket extends Ticket {
……
}
class StudentAdvanceTicket extends AdvanceTicket {
……
}
输入样例:

输入票号,创建一个WalkupTicket对象。
输入票号和提前天数,创建一个AdvanceTicket对象。
输入票号、提前天数和身高,创建一个StudentAdvanceTicket对象。

1
2 10
3 11 130
输出样例:

输出创建的3个对象的票号和票价(调用toString()方法)。

Number:1,Price:50
Number:2,Price:40
Number:3,Price:20

代码长度限制

16 KB

时间限制

400 ms

内存限制

注意满分代码给您端上
package pta代码;

import java.util.*;

//(1)编写抽象类Ticket类,包含以下成员
abstract class Ticket {

	// ①属性:
	// number:私有,int型,表示票号;
	private int number;

	public int getNumber() {
		return number;
	}

	public void setNumber(int number) {
		this.number = number;
	}

	// ②方法:
	// Ticket(int number), 构造方法,初始化票号;
	public Ticket(int number) {
		this.setNumber(number);
	}

	// int getPrice(), 返回票价,抽象方法;
	abstract public int gtePrice();

	// String toString(),返回一个字符串,格式为“Number:票号,Price:票价”。;
	abstract public String toString();

}

//(2)编写Ticket类的子类WalkupTicket,表示当天票,包含以下成员
class WalkupTicket extends Ticket {
	int price;

	// ①方法:
	// 1)WalkupTicket(int number), 构造方法,初始化票号;
    //下面的super()要调用父类的方法和变量就必须在第一个方法体中实现super()
    //具体且要表上其中的成员变量
	public WalkupTicket(int number) {
		super(number);
		this.price = 50;
	}

	// 2)int getPrice(), 返回票价50。
	@Override
	public int gtePrice() {
		return this.price;
	}

	// 子类好像必须将它父类中得这个toString重写,不知道为啥
    //后面查了点资料才知道要实现一个接口如果不是抽象类就必须是下面接口的全部发方法
	@Override
	public String toString() {
		return "Number:" + this.getNumber() + ",Price:" + price;
	}
}

//3、编写AdvanceTicket类的子类StudentAdvanceTicket,表示学生预订票,包含以下成员
class AdvanceTicket extends Ticket {

	// 1)、leadTime:私有,int型,表示提前预订的天数;
	int leadTime = 0;
	int price = 0;

	// 2)、AdvanceTicket(int number,int leadTime), 构造方法,初始化票号和提前天数;
	public AdvanceTicket(int number, int leadTime) {
		super(number);
		this.leadTime = leadTime;
		if (leadTime > 10)
			this.price = 30;
		else
			this.price = 40;
	}

	// 3)、int getPrice(), 如果提前天数>10天,票价30,否则,票价40。
	@Override
	public int gtePrice() {
		return this.price;
	}

	@Override
	public String toString() {
		return "Number:" + this.getNumber() + ",Price:" + this.price;
	}
}

//4编写AdvanceTicket类的子类StudentAdvanceTicket,表示学生预订票,包含以下
class StudentAdvanceTicket extends AdvanceTicket {

	// 1、height:私有,int型,表示购票学生的身高(单位厘米);
	int height;
	int price;

	// ②方法:
	// 1)StudentAdvanceTicket(int number,int leadTime,int height),
	// 构造方法,初始化票号、提前天数和身高;
	public StudentAdvanceTicket(int number, int leadTime, int height) {
		super(number, leadTime);
		this.height = height;
		if (height > 120) {
			if (leadTime > 10)
				this.price = 20;
			else
				this.price = 30;
		} else {
			if (leadTime > 10)
				this.price = 10;
			else
				this.price = 15;
		}
	}

	// 2)int getPrice(),
	// 如果学生身高>120:提前天数>10天,票价20,否则,票价30。
	// 如果学生身高<=120,票价是身高120以上学生的对折。
	public int getPrice() {
		return this.price;
	}

	@Override
	public String toString() {
		return "Number:" + this.getNumber() + ",Price:" + this.price;
	}
}

public class Main {
	public static void main(String args[]) {
		Scanner cin = new Scanner(System.in);
		Ticket a = new WalkupTicket(cin.nextInt());
		System.out.println(a.toString());
		Ticket b = new AdvanceTicket(cin.nextInt(), cin.nextInt());
		System.out.println(b.toString());
		Ticket c = new StudentAdvanceTicket(cin.nextInt(), cin.nextInt(), cin.nextInt());
		System.out.println(c.toString());
	}
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/862844.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号