我有这些课程:
interface Shape
{
public double getPerimeter();
public double getArea();
public void getDetails();
}
和
class Circle implements Shape
{
private double PI = 3.14;
private int radius;
double perimeter, area;
//constructor
public Circle(int radius)
{
perimeter = 2.0 * (PI * radius);
area = PI * (radius * radius);
}
public int getRadius()
{
return radius;
}
public double getPerimeter()
{
return perimeter;
}
public double getArea()
{
return area;
}
public void getDetails()
{
System.out.println("Shape Type: Circle " + "\n"
+ "Radius: " + getRadius() + "\n"
+ "Perimeter: " + getPerimeter() + "\n"
+ "Area: " + getArea() + "\n" );
}
}
最后
public class TestShape
{
public static void main(String args[])
{
for(int i = 0; i < args.length; i++)
{
try
{
Integer.parseInt(args[i]);
}
catch(NumberFormatException nfe)
{
System.err.print("wrong");
}
catch(IllegalArgumentException iae)
{
System.err.print("wrong");
}
if(args.length==1)
{
i = Integer.parseInt(args[0]);
Circle r1 = new Circle(i);
r1.getDetails();
}
}
}
}
我们被分配在终端的命令行输入1,2或3个数字,输出将根据数组大小显示它的形状。当我输入一个数字时,我设法获得了正确的参数和区域,但是半径保持显示0而不是我输入的实际数字。
This is what the output looks like
那你们觉得怎么样?
答案 0 :(得分:2)
您没有在Circle ...
的构造函数中指定半径public Circle(int radius)
{
perimeter = 2.0 * (PI * radius);
area = PI * (radius * radius);
this.radius = radius // this statement is missing
}
因此,circle.getRadius()
始终返回未初始化的默认int值0
。
答案 1 :(得分:0)
在你的构造函数中:
public Circle(int radius)
{
perimeter = 2.0 * (PI * radius);
area = PI * (radius * radius);
}
radius
引用参数radius
,而不是radius
中声明的Circle
字段。您需要通过将radius
参数分配给radius
字段来使它们相同。要引用radius
字段,请使用this.radius
。
this.radius = radius;
由于您未在代码中执行此操作,radius
返回的getRadius
为0,这是未分配int
的默认值。
答案 2 :(得分:0)
如果未初始化,则默认情况下为实例变量分配值。如果是int,则默认为0。因此,要将值分配给实例变量radius,需要在构造函数中添加此行。
this.radius = radius
我们正在使用 this ,因为您的实例变量和本地变量具有相同的名称。