无法显示正确的值

时间:2017-07-05 06:38:06

标签: java arrays

我有这些课程:

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

那你们觉得怎么样?

3 个答案:

答案 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 ,因为您的实例变量和本地变量具有相同的名称。