我尝试从我的测试类初始化一个圆形对象,但是参数(5.5)没有通过。结果是错误的。我尝试调试并找出圆圈类中的半径为0.00,5.5没有传递给Circle类。 任何人都可以帮助我吗?
这是我的输出:
The area of circle is: 3.14
这是我的测试类:
public class ShapeTest {
public static void main(String[] args){
Circle circle = new Circle(5.5);
System.out.println(circle);
}
}
}
这是我的圈子类:
public class Circle extends TwoDimensionalshape {
private double radius;
public Circle(double radius){
super(radius);
}
public void setRadius(double radius){
this.radius = radius;
}
public double getRadius(){
return radius;
}
@Override
public double getArea(){
return 3.14+getRadius()+getRadius();
}
@Override
public String toString(){
return String.format("%s %,.2f%n ","The area of circle is: ",getArea());
}
}
这是我的超级班:
public class TwoDimensionalshape implements Area{
private double radius;
private double base;
private double height;
public TwoDimensionalshape(double radius){
this.radius = radius;
}
public TwoDimensionalshape(double base, double height){
this.base = base;
this.height = height;
}
public double getRadius() {
return radius;
}
public double getBase() {
return base;
}
public double getHeight() {
return height;
}
@Override
public double getArea(){
return 1;
}
public String toString(){
return "The area is: "+getArea();
}
}
答案 0 :(得分:3)
radius
中的Circle
变量隐藏 radius
中的TwoDimensionalshape
变量。它们是两个不同的变量。您的构造函数在TwoDimensionalShape
中设置了一个,但getArea
正在使用Circle
中的那个。
删除radius
中的Circle
变量。通过从Circle
中删除该方法,让getRadius
继承Circle
。同样在Circle
中,将setRadius
移至TwoDimensionalShape
。
此外,在getArea
中,将半径乘以两次而不是将其相加两次。您也可以使用Math.PI
代替3.14
。
return Math.PI * getRadius() * getRadius();
答案 1 :(得分:1)
您在Circle
构造函数中缺少以下行:
public Circle(double radius){
super(radius);
this.radius = radius; // add this line
}
radius
中的private
为TwoDimensionalshape
,您无法从子类(在这种情况下来自Circle
)访问它。您需要在radius
的构造函数中设置Circle
类Circle
的值,就像在代码中一样,它使用getArea()
radius
值计算0
1}}。
另一个问题 - 要正确计算面积,你应该改变:
return 3.14 + getRadius() + getRadius();
为:
return 3.14 * getRadius() * getRadius();
答案 2 :(得分:1)
从Circle类中删除public static function transaction_color_class($string)
{
switch ($string) {
case 'buy':
case 'withdraw':
return 'text-danger';
break;
case 'charge':
case 'profit':
case 'return':
return 'text-success';
break;
default:
return 'text-muted';
break;
}
,它应该可以正常工作。同时将Circle类中的getRadius()方法体更改为:
foreach(Transaction::getTransactions(5) as $trans)
{
echo $trans->getColor();
}