6-5 从抽象类shape类扩展出一个正n边形 分数 10 作者 张德慧 单位 西安邮电大学 在一个正n边形(Regular Polygon)中,所有边的边长都相等,且所有角的度数相同(即这个多边形是等边、等角的)。请从下列的抽象类shape类扩展出一个正n边形类RegularPolygon,这个类将正n边形的边数n和边长a作为私有成员,类中包含初始化边数n和边长a的构造方法。 public abstract class shape {// 抽象类 public abstract double getArea();// 求面积 public abstract double getPerimeter(); // 求周长 } 计算正n边形的面积公式为: Area=n×a×a/(tan((π/n))×4); 注意:需要将角度转换成弧度后再计算三角函数。 类名:RegularPolygon 裁判测试程序样例: abstract class shape {// 抽象类 /* 抽象方法 求面积 */ public abstract double getArea(); /* 抽象方法 求周长 */ public abstract double getPerimeter(); } /* 你提交的代码将嵌入到这里 */ public class Main { public static void main(String[] args) { Scanner input = new Scanner(System.in); DecimalFormat d = new DecimalFormat("#.####");// 保留4位小数 int n=input.nextInt(); double side = input.nextDouble(); shape rp = new RegularPolygon(n,side); System.out.println(d.format(rp.getArea())); System.out.println(d.format(rp.getPerimeter())); input.close(); } } 输入样例: 5 7 输出样例: 84.3034 35 代码长度限制 96 KB 时间限制 1000 ms 内存限制 75 MB
时间: 2024-04-28 14:21:04 浏览: 33
public class RegularPolygon extends shape {
private int n; // 边数
private double a; // 边长
public RegularPolygon(int n, double a) {
this.n = n;
this.a = a;
}
@Override
public double getArea() {
double pi = Math.PI;
double angle = pi / n;
double tan = Math.tan(angle);
return n * a * a / (4 * tan);
}
@Override
public double getPerimeter() {
return n * a;
}
}
相关问题
R6-2 从抽象类shape类扩展出一个正n边形 分数 10 作者 张德慧 单位 西安邮电大学 在一个正n边形(Regular Polygon)中,所有边的边长都相等,且所有角的度数相同(即这个多边形是等边、等角的)。请从下列的抽象类shape类扩展出一个正n边形类RegularPolygon,这个类将正n边形的边数n和边长a作为私有成员,类中包含初始化边数n和边长a的构造方法。 public abstract class shape {// 抽象类 public abstract double getArea();// 求面积 public abstract double getPerimeter(); // 求周长 } 计算正n边形的面积公式为: Area=n×a×a/(tan((π/n))×4); 注意:需要将角度转换成弧度后再计算三角函数。 类名:RegularPolygon
代码如下:
```
public class RegularPolygon extends shape {
private int n; // 边数
private double a; // 边长
public RegularPolygon(int n, double a) {
this.n = n;
this.a = a;
}
@Override
public double getArea() {
double radian = Math.toRadians(180.0 / n); // 角度转弧度
return n * a * a / (4 * Math.tan(radian));
}
@Override
public double getPerimeter() {
return n * a;
}
}
```
在正n边形类中,我们定义了私有成员变量n和a来存储正n边形的边数和边长。RegularPolygon类继承了shape抽象类,并实现了getArea()和getPerimeter()方法。在getArea()方法中,我们根据公式计算正n边形的面积,先将角度转换成弧度,然后使用Math库中的tan()方法计算正切值。在getPerimeter()方法中,我们直接返回正n边形的周长,即n*a。
6-1 从抽象类shape类扩展出一个圆形类circle (10 分)
### 回答1:
可以从抽象类Shape类扩展出一个圆形类Circle。Circle类需要实现Shape类中定义的抽象方法,并且需要添加圆形特有的属性和方法,比如圆的半径、面积、周长等。在Circle类中可以使用数学库中的π常量来计算圆的相关属性。
### 回答2:
抽象类Shape是一个用来表示几何形状的抽象类,我们可以将它作为一个基类,从中扩展出各种具体的形状类。在这里,我们可以扩展出圆形类Circle。
为了继承Shape类,我们可以定义类Circle并继承Shape类。Circle类可以通过复写Shape类中的一些方法来给出自己的实现。例如,我们可以在Circle中定义一个求面积的方法,以及一个求周长的方法。此外,Circle类还需要拥有独特的属性来描述它自己,例如半径(r)。
在定义Circle类时,我们需要注意其继承了Shape类的方法和属性,因此圆形类Circle应该包含以下特征:
1.拥有Shape类的抽象方法或者实现的方法,例如getPerimeter()和getArea()方法;
2.定义自己特有的属性,例如半径r;
3.提供构造方法;
4.必要时也可以定义自己特有的方法。
下面是一份Circle类的伪代码:
abstract class Shape {
public abstract double getPerimeter();
public abstract double getArea();
}
class Circle extends Shape {
private double r;
public Circle(double r) {
this.r = r;
}
@Override
public double getPerimeter() {
return 2 * Math.PI * r;
}
@Override
public double getArea() {
return Math.PI * r * r;
}
public double getR() {
return r;
}
public void setR(double r) {
this.r = r;
}
}
在这份伪代码中,Circle类中包含了Shape类中的两个抽象方法,分别是计算周长和面积的方法。而在Circle类中,我们为其定义了半径r,以及构造函数和一些公共的get和set方法,以便其他程序可以进行访问。当我们需要创建一个圆形时,只需要实例化一个Circle类,并在构造函数中传入半径作为参数,即可创建出一个圆形对象。
通过扩展Shape类,我们可以定义各种具体的形状类,比如正方形、长方形、三角形等等。这样,我们的代码会更加简洁、易于维护和扩展。实现具体类的时候,我们只需要根据该类的特点来实现其独特的属性和方法即可。
### 回答3:
抽象类是一种不能够直接被实例化的类,其存在的最主要目的是为了让子类继承它并实现它的抽象方法。在这个题目中,我们需要从抽象类Shape类扩展出一个圆形类Circle。
因为Shape类是一个抽象类,所以我们需要实现它的抽象方法来使得Circle类可以正常使用。在这个题目中,我们可以为Shape类增加一个抽象的getArea方法,这个方法的作用是返回这个形状的面积。之后,我们为Circle类实现这个方法,使得Circle类可以被实例化并且能够返回正确的面积值。
除此之外,Circle类还需要一个属性——半径,因为我们知道圆形的面积和半径之间有一个确定的对应关系。因此,我们在Circle类中增加一个radius属性,使得每个Circle对象都可以访问并修改自己的半径值。为了确保半径的有效性,我们可以在Circle类中增加一些限制条件,例如半径必须大于等于零,这样就可以有效地避免出现不合理的半径值。
最后,我们需要在Circle类的构造函数中初始化这个半径值,并且为Circle类增加一个toString方法,使得我们可以方便地将Circle对象转换为字符串。这个toString方法可以返回一个包含Circle对象属性值的字符串,这样就方便了我们对Circle对象进行调试和输出。
总之,从Shape类扩展出一个Circle类需要我们实现Shape类的getArea方法、Circle类的radius属性、限制条件、构造函数和toString方法。通过这些操作,我们可以轻松地构建一个Circle类,方便我们进行相关的计算和操作。
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)