2017-07-05 55 views
0

我有这些类:无法显示正确的值

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而不是输入的实际数字。

​​

所以,你们觉得呢?

+2

这是Java吗?它看起来像Java。请记住下次使用正确的语言标签。也请尽量避免亵渎。并且不要发布(链接到)包含文本的图像。相反,将文本*作为*文本*复制粘贴到问题主体中。 *您的问题是什么?*您使用您的代码显示的问题是什么?请花一些时间[采取SO旅游](http://stackoverflow.com/tour)和[阅读如何提出好问题](http://stackoverflow.com/help/how-to-ask)。 –

+1

整洁的错误处理消息... – Lemonov

+0

这是一个简单的缺失行,我已经投票关闭作为一个错误,没有必要在SO的未来。 – AxelH

回答

2

你是不是在分配圈的构造半径...

public Circle(int radius) 
{ 
    perimeter = 2.0 * (PI * radius); 
    area = PI * (radius * radius); 
    this.radius = radius // this statement is missing 
} 

因此,circle.getRadius()总是返回未初始化的默认int值0

0

在你的构造:

public Circle(int radius) 
{ 
    perimeter = 2.0 * (PI * radius); 
    area = PI * (radius * radius); 
} 

radius指参数radius,而不是在Circle宣布radius领域。您需要通过将radius参数分配给radius字段来使它们相同。要参考radius字段,请使用this.radius

this.radius = radius; 

因为你没有在你的代码做到这一点,通过getRadius返回radius是0,这是未分配int的默认值。

0

如果未初始化,则实例变量默认分配值。在int的情况下它默认为0。因此,要将值分配给您的实例变量半径,您需要在构造函数中添加此行。

this.radius =半径

我们因为你的实例变量和局部变量都具有相同的名称使用这个