java - 当从我的主方法调用时,我在子类中的 toString 方法返回零
问题描述
我有使用抽象类作为超类“形状”的任务。它具有三个扩展该类的类,Triangle、Circle 和 Square。每个类都应该计算这些形状的面积和周长。当我System.out.println(shapeArray[i].computeArea());
在一个 for 循环中时,我有一些工作。但是,当我尝试从该 for 循环中的子类调用 toString 方法时,所有内容都返回为“0”。我感谢任何花时间提供帮助的人,因为我很困在这里。我觉得我整天都在阅读、重新阅读主题和教科书。我觉得这里只是有一些我看不到的愚蠢错误。
形状.java
public class Circle extends Shape {
private double radius;
final private double PI = 3.14159;
private double circumfrence;
private double area;
Circle(double radius) {
this.radius = radius;
}
@Override
public double computeArea() {
double radSquared = radius * radius;
double area = PI * radSquared;
return area;
}
@Override
public double computePerimeter() {
circumfrence = 2 * PI * radius;
return circumfrence;
}
@Override
public String toString() {
return "Area of Circle: " +area + "\nCircumfrence of Circle: " + circumfrence;
}
}
三角.java
public class Triangle extends Shape {
private double side1;
private double side2;
private double side3;
private double area;
private double perimeter;
Triangle (double side1, double side2, double side3) {
this.side1 = side1;
this.side2 = side2;
this.side3 = side3;
}
@Override
public double computeArea() {
double s =(side1 + side2 + side3) / 2;
double area= Math.sqrt(s * (s - side1) * (s - side2) * (s - side3));
area = this.area;
return area;
}
@Override
public double computePerimeter() {
perimeter = side1 + side2 + side3;
return perimeter;
}
@Override
public String toString() {
return "Area of Triangle: " + area+ "\nPerimeter of Triangle: " + perimeter;
}
}
Circle.java
public class Circle extends Shape {
private double radius;
final private double PI = 3.14159;
private double circumfrence;
private double area;
Circle(double radius) {
this.radius = radius;
}
@Override
public double computeArea() {
double radSquared = radius * radius;
double area = PI * radSquared;
return area;
}
@Override
public double computePerimeter() {
circumfrence = 2 * PI * radius;
return circumfrence;
}
@Override
public String toString() {
return "Area of Circle: " +area + "\nCircumfrence of Circle: " + circumfrence;
}
}
矩形.java
public class Rectangle extends Shape {
private double length;
private double height;
private double sumOfLength;
private double sumOfHeight;
private double area;
private double perimeter;
Rectangle(double length, double height) {
this.height = height;
this.length = length;
}
@Override
public double computeArea() {
area = (length * height);
return area;
}
@Override
public double computePerimeter() {
sumOfLength = length * 2;
sumOfHeight = height * 2;
perimeter = sumOfLength + sumOfHeight;
return perimeter;
}
@Override
public String toString() {
return "Area of Rectangle: " +area + "\nPerimeter of Rectangle: " + perimeter;
}
}
ShapeArray.java
public class ShapeArray {
public static void main(String [] args) {
Shape shapeArray[] = new Shape[3];
Circle circ = new Circle(9);
Rectangle rect = new Rectangle(10, 6);
Triangle tri = new Triangle(6, 8, 12);
shapeArray[0] = circ;
shapeArray[1] = rect;
shapeArray[2] = tri;
for (int i = 0; i <= 2; i++) {
System.out.println(shapeArray[i].toString());
}
}
}
输出:
Area of Circle: 0.0
Circumfrence of Circle: 0.0
Area of Rectangle: 0.0
Perimeter of Rectangle: 0.0
Area of Triangle: 0.0
Perimeter of Triangle: 0.0
解决方案
您的类Triangle.computeArea
方法将 from 更改area = this.area;
为this.area=area;
Other 类,如下所示。
推荐阅读
- javascript - SSG和SSR如何选择?
- django-admin - TabularInline 中字段的默认值
- r - 使用制表符粘贴字符串
- python - debian/ubuntu python /bin/python3
- python - 如何为 json.dump() 添加唯一 ID
- javascript - 在 jest mocking 中指定函数参数
- javascript - 从选择列表中打开 URL 并在提交时传递所有变量
- r - 为什么 add_footnote 不能在 r-markdown pdf 中使用 kableextra?
- sql - 如何在配置单元表中为所有列收集具有计数的唯一值?
- javascript - 将文本发送到带引号的节点时出错``