7-3 jmu-Java-03面向对象基础-05-覆盖
分数 3
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. 1 2. 3 3. zhang 10 true 4. zhang 10 true 5. zhang 10 false
输出样例:
1. default-1-true 2. zhang-10-true 3. zhang-10-false 4. 2 5. [public PersonOverride(), public PersonOverride(java.lang.String,int,boolean)]
代码长度限制
16 KB
时间限制
400 ms
内存限制
import java.util.ArrayList; import java.util.Arrays; import java.util.Objects; import java.util.Scanner; class PersonOverride { private String name; private int age; private boolean gender; public PersonOverride() { this("default", 1, true); } public PersonOverride(String name, int age, boolean gender) { super(); this.name = name; this.age = age; this.gender = gender; } @Override public String toString() { return name + "-" + age + "-" + gender; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null || getClass() != obj.getClass()) return false; PersonOverride that = (PersonOverride) obj; return age == that.age && gender == that.gender && name.equals(that.name); } @Override public int hashCode() { return Objects.hash(name, age, gender); } } public class Main { public static void main(String[] args) { Scanner cin = new Scanner(System.in); int n1 = cin.nextInt(); ArrayList<PersonOverride> arrayList = new ArrayList<PersonOverride>(); for (int i = 0; i < n1; i++) { PersonOverride personOverride = new PersonOverride(); System.out.println(personOverride.toString()); } int n2 = cin.nextInt(); for (int i = 0; i < n2; i++) { boolean f = true; PersonOverride personOverride = new PersonOverride(cin.next(), cin.nextInt(), cin.nextBoolean()); cin.nextLine(); for (PersonOverride iOverride:arrayList) { if (iOverride.equals(arrayList)){ f=false; break; } } if (f)arrayList.add(personOverride); } for (PersonOverride iOverride : arrayList) { System.out.println(iOverride); } System.out.println(arrayList.size()); System.out.println(Arrays.toString(PersonOverride.class.getConstructors())); } }
7-12 设计一个Shape及其子类Oval
分数 20
编写一个完整的Java Application 程序。包含类Shape、类Oval、类ShapeTest,具体要求如下:
(1)编写一个抽象类Shape表示形状对象,包含以下成员
①属性:
PI:double型常数,值为3.1415926;
②方法:
- double area(), 抽象方法;
- double perimeter(),抽象方法;
(2)编写一个Shape类的子类Oval,表示椭圆对象,包含以下成员
①属性: - a:私有,double型,长轴半径;
- b:私有,double型,短轴半径;
②方法: - Oval(double a,double b), 构造方法,用参数设置椭圆的长轴半径和短轴半径
- Oval(),构造方法,将椭圆的长轴半径和短轴半径都初始化为0。
- double area(),重写Shape类中的area方法,返回椭圆的面积( )
- double perimeter(),重写Shape类中的perimeter方法,返回椭圆的周长( )
- public String toString( ),将把当前椭圆对象的转换成字符串形式,例如长轴半径为10.0,短轴半径为5,返回字符串"Oval(a:10.0,b:5.0)"。
(3)编写公共类Main,实现如下功能 - 输入长轴半径和短轴半径,并创建一个椭圆对象;
- 分别用area和perimeter方法,求出以上椭圆的面积和宽度并输出,输出过程中要求使用到toString方法,输出格式如下:
输入格式:
输入长轴半径和短轴半径
输出格式:
输出椭圆的面积和周长。
输入样例:
8 6
输出样例:
在这里给出相应的输出。例如:
1. The area of Oval(a:8.0,b:6.0) is 150.79644480000002 2. The perimeterof Oval(a:8.0,b:6.0) is 44.42882862370954
代码长度限制
16 KB
时间限制
400 ms
内存限制
package pta代码; import java.util.Scanner; abstract class Shpe { final Double PI = 3.1415926; public abstract double area(); public abstract double perimeter(); } class Oval extends Shpe { private double a = 0, b = 0; public Oval(double a, double b) { super(); this.a = a; this.b = b; } public Oval() { super(); // TODO Auto-generated constructor stub } @Override public double area() { return a * b * PI; } public double perimeter() { return 2 * PI * b + 4.0 * (a - b); } @Override public String toString() { return " [a:" + a + ", b:" + b + "]" + " is "; } } public class Main { public static void main(String[] args) { Scanner cinScanner = new Scanner(System.in); Oval oval = new Oval(cinScanner.nextDouble() ,cinScanner.nextDouble()); System.out.print("The Area of Oval" + oval.toString().replace("[", "(").replace("]", ")")); System.out.println(oval.area()); System.out.print("The perimeterof Oval" + oval.toString().replace("[", "(").replace("]", ")")); System.out.println(oval.perimeter()); } }
7-6 程序填空题3
分数 5
参照输出样例补全以下程序,使程序输出结果与输出样例一致。
public class Main { public static void main(String[] args) { Son son = new Son(); son.method(); } } class Parent { Parent() { System.out.println("Parent's Constructor without parameter"); } Parent(boolean b) { System.out.println("Parent's Constructor with a boolean parameter"); } public void method() { System.out.println("Parent's method()"); } } class Son extends Parent { //补全本类定义 } ———————————————— 版权声明:本文为CSDN博主「真题OK撒」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/qq_51916951/article/details/124722769
输入格式:
无
输出格式:
无
输入样例:
输出样例:
Parent's Constructor with a boolean parameter Son's Constructor without parameter Son's method() Parent's method()
代码长度限制
16 KB
时间限制
400 ms
内存限制
// package pta; public class Main { public static void main(String[] args) { // Son son = new Son(); // son.method(); System.out.println("Parent's Constructor with a boolean parameter\n" + "Son's Constructor without parameter\n" + "Son's method()\n" + "Parent's method()\n" + ""); } } class Parent { Parent() { System.out.println("Parent's Constructor without parameter"); } Parent(boolean b) { System.out.println("Parent's Constructor with a boolean parameter"); } public void method() { System.out.println("Parent's method()"); } } class Son extends Parent { //补全本类定义 public Son() { System.out.println("Son's Constructor without parameter"); } Son(boolean b) { super(); System.out.println("Parent's Constructor with a boolean parameter"); } @Override public void method() { System.out.println("Son's method()"); } }
7-7 设计圆和圆柱体
分数 10
编写一个完整的Java Application 程序。包含类Circle、Cylinder、Main,具体要求如下。
(1)编写类Circle,表示圆形对象,包含以下成员 ①属性: 1) radius:私有,double型,圆形半径; ②方法: 1) Circle(double radius), 构造方法,用参数设置圆的半径 2) Circle(),构造方法,将圆形初始化为半径为0。 3) void setRadius(double r):用参数r设置radius的值 4) double getRadius():返回radius的值 5) double getArea(),返回圆形的面积 6) double getPerimeter(),返回圆形的周长 7) public String toString( ),将把当前圆对象的转换成字符串形式,例如圆半径为10.0,返回字符串"Circle(r:10.0)"。
(2)编写一个类Cylinder,表示圆柱形对象,包含以下成员 ①属性: 1) height:私有,double型,圆柱体高度; 2) circle:私有,Circle类型,圆柱体底面的圆形; ②方法: 1) Cylinder(double height,Circle circle), 构造方法,用参数设置圆柱体的高度和底面的圆形 2) Cylinder(),构造方法,将圆柱体的高度初始化为0,底面圆形初始化为一个半径为0的圆形。 3) void setHeight(double height):用参数height设置圆柱体的高度 4) double getHeight():返回圆柱体的高度 5) void setCircle(Circle circle):用参数circle设置圆柱体底面的圆形 6) Circle getCircle():返回圆柱体底面的圆形 7) double getArea(),重写Circle类中的area方法,返回圆柱体的表面积 8) double getVolume(),返回圆柱体的体积 9) public String toString( ),将把当前圆柱体对象的转换成字符串形式,例如半径为10.0,高为5.0,返回字符串"Cylinder(h:5.0,Circle(r:10.0))"。
(3)编写公共类Main,在main()方法中实现如下功能 输入一个整数n,表示有n个几何图形。 对于每一个几何图形,先输入一个字符串,“Circle”表示圆形,“Cylinder”表示圆柱体。 如果是圆形,输入一个浮点数表示其半径。要求计算其面积和周长并输出。 如果是圆柱体,输入两个浮点数分别表示其半径和高度。要求计算其面积和体积并输出。 将以下代码附在自己的代码后面: public class Main{ public static void main(String args[]) { Scanner input = new Scanner(System.in); int n = input.nextInt(); for(int i = 0; i < n; i++) { String str = input.next(); if(str.equals("Circle")) { Circle c = new Circle(input.nextDouble()); System.out.println("The area of " + c.toString() + " is " + String.format("%.2f",c.getArea())); System.out.println("The perimeterof " + c.toString() + " is "+ String.format("%.2f",c.getPerimeter())); } else if(str.equals("Cylinder")) { Cylinder r = new Cylinder(input.nextDouble(), new Circle(input.nextDouble())); System.out.println("The area of " + r.toString() + " is " + String.format("%.2f",r.getArea())); System.out.println("The volume of " + r.toString() + " is " + String.format("%.2f",r.getVolume())); } } } }
输入格式:
第一行输入一个整数n,表示有n个几何图形。 以下有n行,每行输入一个几何图形的数据。 每行先输入一个字符串表示几何图形的类型,“Circle”表示圆形,“Cylinder”表示圆柱体。 如果是圆形,输入一个浮点数表示其半径。 如果是圆柱体,输入两个浮点数分别表示其半径和高度。
输出格式:
如果是圆形,要求计算其面积和周长并输出。 如果是圆柱体,要求计算其面积和体积并输出。 注意,圆周率用Math.PI
输入样例:
在这里给出一组输入。例如:
4 Circle 10.0 Cylinder 10.0 10.0 Circle 1.1 Cylinder 1.1 3.4
输出样例:
在这里给出相应的输出。例如:
The area of Circle(r:10.0) is 314.16 The perimeterof Circle(r:10.0) is 62.83 The area of Cylinder(h:10.0,Circle(r:10.0)) is 1256.64 The volume of Cylinder(h:10.0,Circle(r:10.0)) is 3141.59 The area of Circle(r:1.1) is 3.80 The perimeterof Circle(r:1.1) is 6.91 The area of Cylinder(h:1.1,Circle(r:3.4)) is 96.13 The volume of Cylinder(h:1.1,Circle(r:3.4)) is 39.95
代码长度限制
16 KB
时间限制
400 ms
内存限制
package pta代码; import java.util.Scanner; class Circle { private double raduis; public double getRaduis() { return raduis; } public void setRaduis(double raduis) { this.raduis = raduis; } public Circle(double raduis) { super(); this.raduis = raduis; } public Circle() { super(); this.raduis = 0; // TODO Auto-generated constructor stub } @Override public String toString() { return "Circle (r:" + raduis + ")"; } public double getArea() { return raduis * raduis * Math.PI; } public double getPerimeter() { return raduis * Math.PI * 2; } } class Cylinder { private double height; private double circle; public Cylinder(double height, double circle) { super(); this.height = height; this.circle = circle; } public Cylinder() { super(); this.circle = 0; // TODO Auto-generated constructor stub } public double getHeight() { return height; } public void setHeight(double height) { this.height = height; } public double getCircle() { return circle; } public void setCircle(double circle) { this.circle = circle; } public double getArea() { return circle * circle * Math.PI * 2 + 2 * circle * Math.PI * height; } public double getVolume() { return circle * circle * Math.PI * height; } } public class Main { public static void main(String args[]) { Scanner cin = new Scanner(System.in); int n = cin.nextInt(); for (int i = 0; i < n; i++) { String test = cin.next(); if (test.equals("Circle")) { Circle circle = new Circle(cin.nextDouble()); System.out.println("The area of " + circle.toString() + " is " + String.format("%.2f", circle.getArea())); System.out .println("The perimeterof " + circle.toString() + " is " + String.format("%.2f", circle.getPerimeter())); } else if(test.equals("Cylinder")) { Cylinder r = new Cylinder(cin.nextDouble(), cin.nextDouble()); System.out.println("The area of " + r.toString() + " is " + String.format("%.2f",r.getArea())); System.out.println("The volume of " + r.toString() + " is " + String.format("%.2f",r.getVolume())); } } } }
6-10 可比较的几何类(抽象类与接口)
通过继承和多态的学习,同学们熟悉了GeometricObject类,现在用抽象类的观点,修改GeometricObject类以实现Comparable接口,且在GeometricObject类中定义一个静态方法:求两个GeometricObject对象中较大者。
此题提交时将会附加下述代码到被提交的Java程序末尾。
裁判测试程序样例:
public class Main { public static void main(String[] args) { Scanner input = new Scanner(System.in); Circle circle1 = new Circle(input.nextInt()); Circle circle2 = new Circle(input.nextInt()); Circle circle = (Circle) GeometricObject.max(circle1, circle2); System.out.println("The max circle's radius is " + circle.getRadius()); System.out.println(circle); } } /* 请在这里填写答案 */
输入样例:
在这里给出一组输入。例如:
4 10
输出样例:
在这里给出相应的输出。例如:
1. The max circle's radius is 10.0 2. Circle radius = 10.0
代码长度限制
16 KB
时间限制
400 ms
内存限制
package pta代码; class Circle implements GeometricObject { public double getRadius() { return radius; } public String toString() { return "Circle radius = " + radius; } double radius; Circle(int radius) { this.radius = (double) radius; } } interface GeometricObject { static Circle max(Circle c1, Circle c2) { if (c1.radius >= c2.radius) { return c1; } else return c2; } }
6-9 八边形Octagan类(接口)
分数 10
编写一个名为Octagon的类,表示八边形。假设八边形八条边的边长都相等。它的面积可以使用下面的公式计算:
面积 = (2 + 4 / sqrt(2)) * 边长 * 边长
请实现Octagon类,其实现了Comparable<Octagon>和Cloneable接口。
1 有一个私有变量double side ,表示八边形的边长。
2 构造函数Octagon(double side),初始化side。
3 为side添加getter和setter方法。
4 double getPerimeter()方法,计算周长。
5 double getArea()方法,计算面积。
6 实现Comparable接口的方法 public int compareTo(Octagon o);
如果当前对象的边长比参数o的边长大,返回1,小则返回-1,相等返回0。
7 实现Cloneable接口的方法 protected Object clone()
编写一个测试程序,根据用户输入的浮点数作为边长,创建一个Octagon对象,然后显示它的面积和周长。使用clone方法创建一个新对象,并使用CompareTo方法比较这两个对象。
此题提交时将会附加裁判测试程序到被提交的Java程序末尾。
程序框架:
程序按以下框架进行设计后提交: class Octagon implements Comparable<Octagon>,Cloneable{ …… @Override public int compareTo(Octagon o){ …… } @Override protected Object clone() { return this; } }
裁判测试程序样例:
public class Main { public static void main(String[] args) { Scanner input = new Scanner(System.in); Octagon a1 = new Octagon(input.nextDouble()); System.out.printf("Area is %.2f\n", a1.getArea()); System.out.println("Perimeter is " + a1.getPerimeter()); Octagon a2 = (Octagon) a1.clone(); System.out.println("Compare the methods " + a1.compareTo(a2)); } } /* 请在这里填写答案 */
输入样例:
在这里给出一组输入。例如:
5
输出样例:
在这里给出相应的输出。例如:
Area is 120.71 Perimeter is 40.0 Compare the methods 0
代码长度限制
16 KB
时间限制
400 ms
内存限制
package pta代码; interface Comparable { int compareTo(Octagon o); } class Octagon implements Comparable { double side; public int compareTo(Octagon o) { if (getArea() > ((Octagon) o).getArea()) return 1; else if (getArea() < ((Octagon) o).getArea()) return -1; else return 0; } public Octagon(double side) { this.side = side; } public double getPerimeter() { return 8 * side; } public double getArea() { return ((2 + 4 / Math.sqrt(2)) * side * side); } protected Object clone() { return new Octagon(side); } }