[英]Why does my ArrayList show size of zero when logged from main method but shows a size of a certain number when called from internal method?
[英]When called from my main method, my toString method in child class is returning zero
我有任務使用抽象類作為超類“形狀”。 它具有擴展該類的三個類,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;
}
}
圓環.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;
}
}
形狀數組
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;
其他班這樣。
您必須在shapeArray[i].toString()
之前調用 for 循環shapeArray[i].computeArea()
和shapeArray[i].computePerimeter()
shapeArray[i].toString()
。
在ShapeArray.java 中
//other code
for (int i = 0; i <= 2; i++) {
shapeArray[i].computeArea();
shapeArray[i].computePerimeter()
System.out.println(shapeArray[i].toString());
}
//other code
它打印 0,因為您在打印之前沒有調用類實例的周長和面積計算。 但我也建議檢查您的代碼,它沒有使用不必要的變量。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.