实验报告(四)继承和多态 (完整代码)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
public static void main(String[] args) {
System.out.println("要创建几个圆?:");
Scanner a1 = new Scanner(System.in);
int a = a1.nextInt();
System.out.println("总共创建了" + a + "个圆\n请输入各个圆的半径:");
if (Shape.search(rectangle, r1) != 0) {
System.out.println("所查找的矩形的位置及其具体信息为:\n" + Shape.search(rectangle, r1) + r1);
} else {
System.out.println("未找到符合的矩形!");
str2 += String.valueOf(i + 1) + rectangle[i] + "\n";
}
System.out.println("您所创建的矩形按面积由小到大排序如下:\n" + str2);
System.out.println("要查找的圆的半径?:");
Scanner e5 = new Scanner(System.in);
创建一个Java应用项目
把UML项目中的类自动生成代码到Java应用项目中
实现类中的方法及通用的排序和检索程序
进行编译
进行测试,使用的测试用例:
输入:预期输出:

五、调试过程
1.编译过程
记录算法实现中发现的语法错误及改正
2.调试过程
记录算法实现中发现的逻辑错误及改正,对每个测试用例,记录实际输出,并与预期输出进行比较,如果不同,分析产生错误的原因并改正。
} else {
System.out.println("未找到符合的圆!");
}
System.out.println("要查找的矩形的长和宽?:");
Scanner f6 = new Scanner(System.in);
Rectangle r1 = new Rectangle(f6.nextDouble(), f6.nextDouble());
福建农林大学计算机与信息学院实验报告

计算机
专业
年级
12级
成绩
姓名
学号
实验室
机号
实验时间
教师签字
实验(四)
一、实验目的和要求
1.掌握面向对象的继承关系
2.理解面向对象的多态
3.掌握方法的重写
4.掌握接口的实现
二、实验内容和原理
设计一个抽象类Shape,包括2个抽象方法,分别是计算形状的周长和面积。设计具体类Rectangle和Circle,分别表示矩形和圆,它们都是Shapes的子类。使Rectangle和Circle都实现Comparable接口(根据面积比较大小),编写一个通用的排序程序和一个通用的二分查找程序(自己写代码实现),能对这二种类型的数组进行排序并查找指定的对象。
return radius;
}
public void setRadius(double val) {
this.radius = (val < 0 ? 0 : val);
}
@Override
public String toString() {
String str = "";
str += "圆半径:" + radius + "周长:" + String.format("%-6.2f", getPerimeter());
输入:
预期输出:
实际输出:
分析
六、实验结果Baidu Nhomakorabea
用与测试用例不同的输入数据运行算法,写出得到的结果,并分析结果是否正确。
输入:
输出结果:
结果分析:
七、总结
对上机实验结果进行分析、上机的心得体会及改进意见。
附录:
如果原来的算法中发现了错误,在附录中附上改正后的算法实现。
double e = e5.nextDouble();
Circle c1 = new Circle(e);
if (Shape.search(circle, c1) != 0) {
System.out.println("所查找的圆的位置及其具体信息为:\n" + Shape.search(circle, c1) + c1);
return 1;
} else if (getArea() < ((Rectangle) o).getArea()) {
return -1;
} else {
return 0;
}
}
}
interface Comparable {
int compareTo(Object o);
}
2.实验步骤
创建一个UML项目,并设计类Shape、Rectangle和Circle,并建立描述Shape、Rectangle、Circle和Comparable间关系的类图
三、实验环境
1.硬件环境:
2.软件环境:JDK1.5
四、算法描述及实验步骤
1.算法描述(可以用类图、流程图、伪代码或源程序描述)
package test;
import javax.swing.JOptionPane;
import java.util.Scanner;
public class Test {
str += "面积:" + String.format("%-6.2f", getArea());
return str;
}
protected double getPerimeter() {
return 2 * Math.PI * radius;
}
protected double getArea() {
Shape[] circle = new Shape[a];
Scanner input2 = new Scanner(System.in);
for (int i = 0; i < a; i++) {
circle[i] = new Circle(input2.nextDouble());
}
System.out.println("要创建几个矩形?:");
for (int j = i - 1; j >= 0; j--) {
if (((Comparable) currentMax).compareTo(list[j]) < 0) {
currentMax = list[j];
currentMaxIndex = j;
}
}
if (currentMaxIndex != i) {
return width;
}
public void setWidth(double val) {
this.width = (val <= 0 ? 1 : val);
}
@Override
public String toString() {
String str = "";
str += "矩形长:" + length + "宽:" + width;
setLength(length);
setWidth(width);
}
public double getLength() {
return length;
}
public void setLength(double val) {
this.length = (val <= 0 ? 1 : val);
}
public double getWidth() {
sort(list);
while (low <= high) {
mid = (low + high) / 2;
if (((Comparable) target).compareTo(list[mid]) < 0) {
high = mid - 1;
} else if (((Comparable) target).compareTo(list[mid]) > 0) {
str1 += String.valueOf(i + 1) + circle[i] + "\n";
}
System.out.println("您所创建的圆按半径由小到大排序如下:\n" + str1);
Shape.sort(rectangle);
String str2 = "";
for (int i = 0; i < rectangle.length; i++) {
return -1;
} else {
return 0;
}
}
}
abstract class Shape implements Comparable {
protected abstract double getPerimeter();
protected abstract double getArea();
for (int i = 0; i < b; i++) {
rectangle[i] = new Rectangle(c3.nextDouble(), c3.nextDouble());
}
Shape.sort(circle);
String str1 = "";
for (int i = 0; i < circle.length; i++) {
return Math.PI * radius * radius;
}
public int compareTo(Object o) {
if (radius > ((Circle) o).radius) {
return 1;
} else if (radius < ((Circle) o).radius) {
str += "周长:" + String.format("%-6.2f", getPerimeter());
str += "面积:" + String.format("%-6.2f", getArea());
return str;
}
protected double getPerimeter() {
}
}
}
class Circle extends Shape {
private double radius;
public Circle() {
this(0);
}
public Circle(double radius) {
setRadius(radius);
}
public double getRadius() {
list[currentMaxIndex] = list[i];
list[i] = currentMax;
}
}
}
public static int search(Shape[] list, Shape target) {
int mid, low = 0, high = list.length - 1;
return 2 * (length + width);
}
protected double getArea() {
return length * width;
}
public int compareTo(Object o) {
if (getArea() > ((Rectangle) o).getArea()) {
Scanner b2 = new Scanner(System.in);
int b = b2.nextInt();
Shape[] rectangle = new Shape[b];
System.out.println("总共创建了" + b + "个矩形\n请依次输入各个矩形的长和宽:");
Scanner c3 = new Scanner(System.in);
low = mid + 1;
} else {
return mid + 1;
}
}
return 0;
}
}
class Rectangle extends Shape {
private double length;
private double width;
public Rectangle(double length, double width) {
public static void sort(Shape[] list) {
Shape currentMax;
int currentMaxIndex;
for (int i = list.length - 1; i >= 1; i--) {
currentMax = list[i];
currentMaxIndex = i;
相关文档
最新文档