Java程序设计 作业2(继承与多态)

  • Post author:
  • Post category:java


6-1 jmu-Java-03面向对象基础-Object

分数 15

全屏浏览题目

切换布局

作者 郑如滨

单位 集美大学

输入整数n,创建n个对象,放入同一个数组中。

如果输入

c

,则

new Computer();

//注意:Computer是系统中已有的类,无需自己编写

如果输入

d

,则根据随后的输入创建

Double

类型对象。

如果输入

i

,则根据随后的输入创建

Integer

类型对象。

如果输入

s

,则根据随后的输入创建

String

类型对象。

如果不是以上这些输入,则不创建对象,而是将

null

存入数组相应位置。

最后

倒序

输出数组中的所有对象,如果数组中相应位置的元素为

null

则不输出。

裁判测试程序:

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    //这边是你的代码
    sc.close();
}

输入样例:

5
c
d 2.3
other
i 10
s Test

输出样例:

Test
10
2.3
//这行显示Computer对象toString方法

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

import java.util.Scanner;

public class Main
{
	public static void main(String[] args) {
	    Scanner sc = new Scanner(System.in);
	    int n = sc.nextInt();
	    Object[] a = new Object[n];
	    for(int i=0;i<n;i++)
	    {
	    	String b = sc.next();
	    	if(b.equals("c"))
	    	{
	    		a[i] = new Computer();
	    	}
	    	else if(b.equals("d"))
	    	{
	    		a[i] = Double.valueOf(sc.nextDouble());
	    	}
	    	else if(b.equals("i"))
	    	{
	    		a[i] = Integer.valueOf(sc.nextInt());
	    	}
	    	else if(b.equals("s"))
	    	{
	    		a[i] = String.valueOf(sc.next());
	    	}
	    	else
	    	{
	    		a[i] = null;
	    	}
	    	for(int j=n-1;j>=0;j--)
	    	{
	    		 if(a[i]!=null)   
	    		    System.out.println(a[j]);
	    	}
	    }
	    sc.close();
	}
}

6-2 jmu-Java-03面向对象基础-覆盖与toString

分数 10

全屏浏览题目

作者 郑如滨

单位 集美大学



Person

类,

Company

类,

Employee

类。

其中Employee类继承自Person类,属性为:

private Company company;
private double salary;

现在要求编写Employee类的

toString

方法,返回的字符串格式为:

父类的toString-company的toString-salary

函数接口定义:



public String toString()

输入样例:



输出样例:

Li-35-true-MicroSoft-60000.0

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

public String toString()
{
	return super.toString()+"-"+company.toString()+"-"+salary;
}

6-3 抗疫有我

分数 15

全屏浏览题目

作者 fpc

单位 内蒙古师范大学

疫情打破了人们正常的生活,封闭在隔离区的我们经常为生活用品发愁。好在有一个个辛勤的大白,不停地在为我们递送的想要的物品。由于被隔离的人各色各样,所以,想要的东西也不同。这不,男孩要本书,女孩要个洋娃娃。但是大白实在太忙了,来不及看到底是什么人要什么物品,他只知道要给居民送物品,现在请你设计一个程序,将这一正确的物品派送到正确的人手上吧!

裁判测试程序样例:



import java.util.Scanner; class DaBai{ public void send(Resident r,Goods g) { r.apply(g); } } abstract class Resident{//定义居民类 String name; Resident(String name){ this.name=name; } abstract public void apply(Goods g); } abstract class Goods{//定义物品类 abstract public String getGoods(); } /* 请在这里填写答案 */ public class Main { public static void main(String[] args) { DaBai db1=new DaBai(); Scanner sc=new Scanner(System.in); String name1=sc.next(); String name2=sc.next(); db1.send(new Re_boy(name1),new Book()); db1.send(new Re_girl(name2),new Doll()); } }

输入样例:

在这里给出一组输入。例如:

Yangyong
Wangfang

输出样例:

在这里给出相应的输出。例如:

I am a boy. My name is Yangyong. I want a book.
I am a girl. My name is Wangfang. I want a doll.

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

class Re_boy extends Resident
{
	Re_boy(String name)
	{
		super(name);
	}
	public void apply(Goods g) 
	{
		System.out.println("I am a boy. My name is "+name+"."+" I want a "+g.getGoods()+".");
	}
}
class Re_girl extends Resident
{
	Re_girl(String name)
	{
		super(name);
	}
	public void apply(Goods g)
	{
		System.out.println("I am a girl. My name is "+name+"."+" I want a "+g.getGoods()+".");
	}
}
class Book extends Goods
{
	public String getGoods()
	{
		return "book";
	}
}
class Doll extends Goods
{
	public String getGoods()
	{
		return "doll";
	}
}

6-4 使用继承设计:教师类。

分数 10

全屏浏览题目

作者 秋

单位 许昌学院

使用继承设计:教师类。

使程序运行结果为:

Li 40 信工院
教师的工作是教学。

函数接口定义:



定义类Teacher, 继承Person

裁判测试程序样例:



class Person{ String name; int age; Person(String name,int age){ this.name = name; this.age = age; } void work(){ } void show() { System.out.print(name+" "+age+" "); } } /* 请在这里填写答案 */ public class Main { public static void main(String[] args) { Teacher t = new Teacher("Li",40,"信工院"); t.show(); t.work(); } }

输入样例:

没有输入

输出样例:

Li 40 信工院
教师的工作是教学。

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

class Teacher extends Person
{
	private String a;
	Teacher(String name,int age,String a)
	{
		super(name,age);
		this.a = a;
	}
	public void work()
	{
		System.out.println("教师的工作是教学。");
	}
	public void show()
	{
		super.show();
		System.out.println(a);
	}
}

6-5 租车服务

分数 20

全屏浏览题目

作者 刘凤良

单位 天津仁爱学院

某租车公司提供租车服务,针对不同的车辆类型,日租金的计算方式不同,具体地,对于货车而言,根据载重量load(单位是吨)计算,公式为loadx 1000;对于大型客车而言,根据车内座位数seats计算,公式为seatsx50;对于小型汽车而言,根据车辆等级和折旧年数计算,公式为200*level/sqrt(year),其中sqrt表示平方根。设计合适的类继承结构实现上述功能,构造租车公司类CarRentCompany,提供静态函数rentVehicles,能够给定一组待租车辆,计算日租金总额。 在main函数中,读入多个车辆数据,并计算总的日租金。

方法接口定义:



public static double rentVehicles(Vehicle[] vehicles); // 计算日租金总额

裁判测试程序样例:



import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); Vehicle[] vs = new Vehicle[n]; for (int i=0;i<n;i++) { int type = sc.nextInt(); if (type == 1) {//货车 vs[i] = new Truck (sc.nextDouble()); } else if (type == 2) { vs[i] = new Keche(sc.nextInt()); } else if (type == 3) { vs[i] = new Car(sc.nextInt(), sc.nextInt()); } } System.out.printf("%.2f",CarRentCompany.rentVehicles(vs)); } } /* 你的代码被嵌在这里 */

输入描述:

汽车数量 汽车种类 该类汽车相关属性 其中1表示货车,2表示大型客车,3表示小型汽车

输出描述:

总的日租金,保留两位小数

输入样例:

3
1 3
2 50
3 5 5

输出样例:

5947.21

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

abstract class Vehicle
{
	abstract public double rent();
}
class Truck extends Vehicle
{
	private double load;
	Truck(double load)
	{
		this.load = load;
	}
	public double rent()
	{
		return load*1000;
	}
}
class Keche extends Vehicle
{
	private int seats;
	Keche(int seats)
	{
		this.seats = seats;
	}
	public double rent()
	{
		return seats*50;
	}
}
class Car extends Vehicle
{
	private int level;
	private int year;
	Car(int level,int year)
	{
		this.level = level;
		this.year = year;
	}
	public double rent()
	{
		return 200*level/Math.sqrt(year);
	}
}
class CarRentCompany
{
	public static double rentVehicles(Vehicle[] vehicles)
	{
		double sum = 0;
		for(int i=0;i<vehicles.length;i++)
		{
			   sum+=vehicles[i].rent();
		}
		return sum;
	}
}

7-1 jmu-Java-03面向对象基础-04-形状-继承

分数 15

全屏浏览题目

作者 郑如滨

单位 集美大学

前言

前面题目

形状

中我们看到,为了输出所有形状的周长与面积,需要建立多个数组进行多次循环。这次试验使用继承与多态来改进我们的设计。

本题描述

1.定义抽象类

Shape



属性:

不可变静态常量

double PI

,值为

3.14




抽象方法:


public double getPerimeter()

,

public double getArea()

2.

Rectangle



Circle

类均继承自Shape类。

Rectangle类(

属性:

int width,length)、Circle类(

属性:

int radius)。

带参构造方法为

Rectangle(int width,int length)

,

Circle(int radius)




toString

方法(Eclipse自动生成)

3.编写

double sumAllArea

方法计算并返回

传入的形状数组中所有对象的面积和




double sumAllPerimeter

方法计算并返回

传入的形状数组中所有对象的周长和

4.

main方法


4.1 输入整型值n,然后建立n个不同的形状。如果输入rect,则依次输入宽、长。如果输入cir,则输入半径。

4.2 然后输出所有的形状的周长之和,面积之和。并将所有的形状信息以样例的格式输出。

提示:

使用

Arrays.toString



4.3 最后输出每个形状的类型与父类型.使用类似

shape.getClass()

//获得类型,

shape.getClass().getSuperclass()

//获得父类型;


注意:

处理输入的时候使用混合使用

nextInt



nextLine

需注意行尾回车换行问题。

思考

  1. 你觉得sumAllArea和sumAllPerimeter方法放在哪个类中更合适?
  2. 是否应该声明为static?

输入样例:

4
rect
3 1
rect
1 5
cir
1
cir
2

输出样例:

38.84
23.700000000000003
[Rectangle [width=3, length=1], Rectangle [width=1, length=5], Circle [radius=1], Circle [radius=2]]
class Rectangle,class Shape
class Rectangle,class Shape
class Circle,class Shape
class Circle,class Shape

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

import java.util.Scanner;

abstract class Shape
{
	final static double PI = 3.14;
	abstract public double getPermeter();
	abstract public double getArea();
}

class Rectangle extends Shape
{
	private int width;
	private int length;
	Rectangle(int width,int length)
	{
		this.width = width;
		this.length = length;
	}
	public double getPermeter()
	{
		return 2*(width+length);
	}
	public double getArea()
	{
		return width*length;
	}
	public String toString()
	{
		return "Rectangle [width="+width+", length="+length+"]";
	}
}
class Circle extends Shape
{
	private int radius;
	Circle(int radius)
	{
		this.radius = radius;
	}
	public double getPermeter()
	{
		return 2*PI*radius;
	}
	public double getArea()
	{
		return PI*radius*radius;
	}
	public String toString()
	{
		return "Circle [radius="+radius+"]";
	}
}
public class Main
{
	public static void main(String[] args)
	{
		Scanner in = new Scanner(System.in);
		int n = in.nextInt();
		Shape[] shape = new Shape[n];
		//因为sumAllPermeter()和sumAllArea()函数需要传入数组求和,所以要想办法把所有输入样例合成一个数组,用类Rectangle和类Circle公共父类定义就行了
		for(int i=0;i<n;i++)
		{
			String a = in.next();
			if(a.equals("rect"))
			{
				shape[i] = new Rectangle(in.nextInt(),in.nextInt());
			}
			if(a.equals("cir"))
			{
				shape[i] = new Circle(in.nextInt());
			}
		}
		System.out.println(sumAllPermeter(shape));
		System.out.println(sumAllArea(shape));
		for(int i=0;i<n;i++)
		{
			if(i==n-1)
				System.out.print(shape[i].toString()+"]\n");
			else if(i==0)
				System.out.print("["+shape[i].toString()+", ");
			else
				System.out.print(shape[i].toString()+", ");
		}
		for(int i=0;i<n;i++)
		{
			 System.out.println(shape[i].getClass()+","+shape[i].getClass().getSuperclass());
		}
	}
	static double sumAllArea(Shape[] a)
	{
		double sum = 0;
		for(int i=0;i<a.length;i++)
		{
			sum += a[i].getArea();
		}
		return sum;
	}
	static double sumAllPermeter(Shape[] a)
	{
		double sum=0;
		for(int i=0;i<a.length;i++)
		{
			sum += a[i].getPermeter();
		}
		return sum;
	}
}

7-2 jmu-Java-03面向对象基础-05-覆盖

分数 15

全屏浏览题目

切换布局

作者 郑如滨

单位 集美大学

Java每个对象都继承自Object,都有equals、toString等方法。

现在需要定义

PersonOverride

类并覆盖其

toString



equals

方法。

1. 新建

PersonOverride


a.

属性



String name



int age



boolean gender

,所有的变量必须为私有(private)。

b.

有参构造方法

,参数为

name, age, gender

c.

无参构造方法

,使用

this(name, age,gender)

调用有参构造方法。参数值分别为

"default",1,true

d.

toString()

方法返回格式为:

name-age-gender

e.

equals

方法需比较name、age、gender,这三者内容都相同,才返回

true

.

2. main方法

2.1 输入n1,使用无参构造方法创建n1个对象,放入数组persons1。

2.2 输入n2,然后指定

name age gender

。每创建一个对象都使用equals方法比较该对象是否已经在数组中存在,如果不存在,才将该对象放入数组persons2。

2.3 输出persons1数组中的所有对象

2.4 输出persons2数组中的所有对象

2.5 输出persons2中实际包含的对象的数量

2.5 使用

System.out.println(Arrays.toString(PersonOverride.class.getConstructors()));

输出PersonOverride的所有构造方法。


提示:

使用

ArrayList

代替数组大幅复简化代码,请尝试重构你的代码。

输入样例:

1
3
zhang 10 true
zhang 10 true
zhang 10 false

输出样例:

default-1-true
zhang-10-true
zhang-10-false
2
[public PersonOverride(), public PersonOverride(java.lang.String,int,boolean)]

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

import java.util.Scanner;
import java.util.ArrayList;
import java.util.Arrays;

class PersonOverride
{
	private String name;
	private int age;
	private boolean gender;
	public PersonOverride(String name,int age,boolean gender)
	{
		this.name = name;
		this.age = age;
		this.gender = gender;
	}
	public PersonOverride()
	{
		this("default", 1,true);
	}
	public String toString()
	{
		return name+"-"+age+"-"+gender;
	}
	public String getName()
	{
		return name;
	}
	public int getAge()
	{
		return age;
	}
	public boolean getGender()
	{
		return gender;
	}
	public boolean equals(Object obj)
	{
		if(obj==null)
			return false;//注意分析输入为空的情况,不然会出错
		PersonOverride other = (PersonOverride)obj;
		if(name.equals(other.getName())&&age==other.getAge()&&gender==other.getGender())
			return true;
		else
			return false;
	}
	
}
public class Main
{
	public static void main(String[] args)
	{
		Scanner in = new Scanner(System.in);
		int n1 = in.nextInt();
		PersonOverride[] person1 = new PersonOverride[n1];
		for(int i=0;i<person1.length;i++)
		{
			person1[i] = new PersonOverride();
		}
		int n2 = in.nextInt();
		PersonOverride[] person = new PersonOverride[n2];
		for(int i=0;i<n2;i++)
		{
			person[i] = new PersonOverride(in.next(),in.nextInt(),in.nextBoolean());
		}
		ArrayList<PersonOverride> person2 = new ArrayList<PersonOverride>();
		for(int i=0;i<n2;i++)
		{
			int flag = 0;
			for(int j=i+1;j<n2;j++)
			{
				if(person[i].equals(person[j]))
					flag=1;
			}
			if(flag==0)
				person2.add(person[i]);
		}
		for(int i=0;i<n1;i++)
		{
			System.out.println(person1[i].toString());
		}
		for(int i=0;i<person2.size();i++)
		{
			System.out.println(person2.get(i).toString());
		}
		System.out.println(person2.size());
		System.out.println(Arrays.toString(PersonOverride.class.getConstructors()));
		//注意输出格式getConstructors()函数只能获取public类型的构造函数
	}
}



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