7-2 设计一个Shape及其子类Oval

本文介绍了如何在Java中创建一个抽象类Shape和其子类Oval,用于表示形状和椭圆。Oval类实现了计算面积和周长的方法,并在Main类中通过用户输入创建椭圆对象进行实例操作。

编写一个完整的Java Application 程序。包含类Shape、类Oval、类ShapeTest,具体要求如下:
(1)编写一个抽象类Shape表示形状对象,包含以下成员
①属性:
PI:double型常数,值为3.1415926;
②方法:

  1. double area(), 抽象方法;
  2. double perimeter(),抽象方法;
    (2)编写一个Shape类的子类Oval,表示椭圆对象,包含以下成员
    ①属性:
  3. a:私有,double型,长轴半径;
  4. b:私有,double型,短轴半径;
    ②方法:
  5. Oval(double a,double b), 构造方法,用参数设置椭圆的长轴半径和短轴半径
  6. Oval(),构造方法,将椭圆的长轴半径和短轴半径都初始化为0。
  7. double area(),重写Shape类中的area方法,返回椭圆的面积( )
  8. double perimeter(),重写Shape类中的perimeter方法,返回椭圆的周长( )
  9. public String toString( ),将把当前椭圆对象的转换成字符串形式,例如长轴半径为10.0,短轴半径为5,返回字符串"Oval(a:10.0,b:5.0)"。
    (3)编写公共类Main,实现如下功能
  10. 输入长轴半径和短轴半径,并创建一个椭圆对象;
  11. 分别用area和perimeter方法,求出以上椭圆的面积和宽度并输出,输出过程中要求使用到toString方法,输出格式如下:

输入格式:

输入长轴半径和短轴半径

输出格式:

输出椭圆的面积和周长。

输入样例:

8 6

输出样例:

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

The area of Oval(a:8.0,b:6.0) is 150.79644480000002
The perimeterof Oval(a:8.0,b:6.0) is 44.42882862370954
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB

代码如下:

import java.util.Scanner;
abstract class Shape{
    public static double PI=3.1415926;
    abstract double area();
    abstract double perimeter();
    
}
 class Oval extends Shape{
    private double a;
    private double b;
    public Oval(){
        this.a=0;
        this.b=0;
    }
    public Oval(double a,double b){
        this.a=a;
        this.b=b;
    }
    @Override
    public double area(){
        return Shape.PI*a*b;
    }
    @Override
    public double perimeter(){
        //return Shape.PI*(3.0*(a+b)-Math.pow((3.0*a+b)*(a+3.0*b),0.5));
        return Shape.PI*Math.pow(2*(a*a+b*b),0.5);
    }
    @Override
    public String toString(){
        return "Oval(a:"+this.a+",b:"+this.b+")";
    }
}
class Main{
    public static void main(String[] args){
        Scanner scan=new Scanner(System.in);
        double a=scan.nextDouble();
        double b=scan.nextDouble();
        Oval o=new Oval(a,b);
        System.out.println("The area of "+o.toString()+" is "+o.area());
        System.out.println("The perimeterof "+o.toString()+" is "+o.perimeter());
    }
}

结果:

Java程序设计》课程实验指导书程序代码(答案)(实验五:Java的异常处理),个人原创,仅供参考与交流。 希望多多交流,共同进步! 实验五 Java的异常处理 一、实验目的: 理解 java 语言中独特的异常处理机制; 掌握异常处理方法; 正确地使用捕获异常和声明抛弃异常的两种异常处理的方法; 了解自定义异常类的使用; 理解抛出异常和声明抛出异常的区别与联系; 二、实验内容: 1. 从命令行得到5个整数,放入一整型数组,然后打印输出,要求:如果输入数据不为整数,要捕获Integer.parseInt()产生的异常,显示“请输入整数”,捕获输入参数不足5个的异常(数组越界),显示“请输入至少5个整数”。 2.写一个方法void sanjiao(int a,int b,int c),判断三个参数是否能构成一个三角形,如果不能则抛出异常IllegalArgumentException,显示异常信息a,b,c+”不能构成三角形”,如果可以构成则显示三角形三个边长,在主方法中得到命令行输入的三个整数,调用此方法,并捕获异常。 3.自定义类Sanj,其中有成员 x,y,z,作为三边长,构造方法Sanj(a,b,c)分别给x,y,z赋值,方法求面积getArea和显示三角形信息(三个边长)showInfo,这2个方法中当三条边不能构成一个三角形时要抛出自定义异常NotSanjiaoException,否则显示正确信息。在另外一个类中的主方法中构造一个Sanj对象(三边为命令行输入的三个整数),显示三角形信息和面积,要求捕获异常。 三、实验要求: 1. 通过实验掌握捕获异常和声明抛弃异常的两种异常处理的方法; 2. 程序必须能够捕获Integer.parseInt()产生的异常并作相应的处理; 3. 程序必须能够将处理的相应的信息输出出来; 4. 写出实验报告。要求记录编译和执行Java程序当中的系统错误信息提材示,并给出解决办法。(附运行界面、源代码)。 四、实验步骤: 1. (第1题) 使用try…..catch…. finally语句对Integer.parseInt()产生的异常进行捕获处理; 2. (第2题) 定义方法void sanjiao(int a,int b,int c)中,不符合条件则抛出异常(if a+b<=c(或a+c<=b,b+c<=a) then throw new IllegalArgumentException(),),再定义main方法,调用此方法,用try…..catch…. finally语句并捕获异常; 3. (第3题) 定义三角形类及相应的方法, 在定义的方法中对不符合条件则抛出异常(如上题) ,再定义main方法,对正确的数据输出正确信息,否则捕获异常; 五、自做实验 1.参考下面的程序,试修改程序,捕获相关异常,使得程序能正常运行。[提示:用错误数据测试,即可得到异常类名,运行时主方法参数输入 abc 测试] public class StringIndexOutOf{ public static void main(String args[]){ System.out.println("字符串索引越界异常"); String str=args[0]; System.out.println(“第四个字符为 ”+str.charAt(3)); int aa=Integer.parseInt(args[0]); System.out.println(“平方为 ”+aa*aa); } }
### 回答1: shape一个抽象类,不能直接实例化。它的子类可以是任何形状,如矩形、圆形、椭圆形等。 下面是一个椭圆形的子类oval设计: ```python class Shape: def area(self): pass def perimeter(self): pass class Oval(Shape): def __init__(self, a, b): self.a = a self.b = b def area(self): return 3.14 * self.a * self.b def perimeter(self): return 2 * 3.14 * ((self.a ** 2 + self.b ** 2) / 2) ** 0.5 ``` 在这个设计中,Shape一个抽象类,它有两个抽象方法area和perimeter。OvalShape子类,它有两个属性a和b,分别表示椭圆的长轴和短轴。它实现了Shape的两个抽象方法,计算椭圆的面积和周长。 使用这个设计,可以创建一个椭圆形的实例,并调用它的方法: ```python oval = Oval(3, 4) print(oval.area()) # 输出:37.68 print(oval.perimeter()) # 输出:17.77153175279978 ``` ### 回答2: 在图形设计中,shape一个常见的概念,它可以表示各种不同的形状,例如矩形、圆形、三角形等等。在Java编程中,shapeJava API中的一个类,是所有图形对象的父类,它包含了基本图形属性和方法。 在shape类中,其中一个子类可以是oval,它表示的是一个“椭圆形”,也就是圆形的变形。在Java编程中,我们可以通过继承shape类,来创建一个oval子类。以下是实现此子类的代码实例: ``` import java.awt.Color; import java.awt.Graphics; public class Oval extends Shape { // 定义椭圆形的x、y坐标、长和宽 private int x, y, width, height; // Oval子类的构造函数 public Oval(int x, int y, int width, int height, Color color) { super(color); // 调用父类的构造函数 this.x = x; this.y = y; this.width = width; this.height = height; } // 绘制椭圆形方法 @Override public void draw(Graphics g) { g.setColor(super.getColor()); // 设置颜色 g.drawOval(x, y, width, height); // 绘制椭圆形 } } ``` 以上代码中,我们通过定义x、y、width、height四个变量来表示椭圆形的位置和大小。在Oval子类的构造函数中,我们首先调用父类Shape的构造函数,来将颜色属性传递给父类。然后,我们将定义好的位置和大小参数传递给Oval子类中的变量,以便在draw方法中使用。 在draw方法中,我们首先通过super.getColor()方法获取父类中设置的颜色属性,并使用g.setColor方法将颜色设置为当前颜色。然后,我们调用g.drawOval方法来绘制椭圆形。 总之,通过创建一个Oval子类,继承Shape类,并实现draw方法,便可以在图形界面中绘制椭圆形。 ### 回答3: 在Java中,Shape一个基本的图形抽象类,用于描述所有形状的属性和操作。在这个设计任务中,我们需要设计一个新的子类,它将扩展Shape的功能,同时添加一些新的形状特定的属性和行为。我们选择继承Shape类,以实现方便和最小的重复代码。 我们的子类名称为Oval,表示椭圆形。Oval将继承Shape的一些基本属性和方法,如位置、颜色、边界、填充等。然后,我们将为Oval添加一些新的属性和方法,以便它能够表示椭圆形状和行为。 首先,我们需要使用类构造函数定义Oval类的字段。由于椭圆形由长轴和短轴两个半径组成,我们将在Oval类中定义这些字段。另外,我们还可以定义一个常量PI,以计算椭圆形的面积和周长。 接下来,我们需要定义一些新的方法以操作椭圆形。例如: - getLongAxis()和getShortAxis()方法可以返回椭圆形的长轴和短轴的长度。 - setLongAxis()和setShortAxis()方法可以设置椭圆形的长轴和短轴的长度。 - getArea()方法可以返回椭圆形的面积。 - getPerimeter()方法可以返回椭圆形的周长。 对于具体的实现,我们可以使用椭圆的数学公式来计算其中的属性。例如,椭圆的面积为πa*b,其中a和b分别是长轴和短轴的一半。 最后,我们还可以实现Oval类的toString()方法,以显示其属性和值。这样做可以方便调试和测试。 在实现这个设计任务时,需要注意以下几点: - 考虑到OvalShape子类,因此必须遵循Shape的抽象方法。 - 在定义字段和方法时,应使用适当的访问修饰符以保护数据的完整性和安全性。 - 实现的方法应该正确、简洁和易于理解。 在设计Oval类之后,我们可以在程序中创建Oval对象,并调用它的方法来操作椭圆形状和属性。例如,我们可以设置椭圆形的位置、颜色、大小和边框,并计算它的面积和周长。这样设计出来的Oval类可以方便地应用于各种应用程序或游戏中,如画图、拼图和动画等。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值