0

我执行了以下代码,当我尝试打印它时,除了 0.0 打印之外没有任何值:

public class RegularPolygon {
 private int numSides; //# sides
 private double sideLength; //side length 
 private double inscribedRadius; //radius of inscribed circle

 private void calcr(){
    inscribedRadius = .5 * sideLength * 1/Math.tan(Math.PI / numSides);
  }
}

public double getr(){
   return inscribedRadius;
}

主要的:

RegularPolygon poly = new RegularPolygon(4, 10);
System.out.println(poly.getr());

输出:

0.0

构造函数:

    public RegularPolygon(int newNumSides, double newSideLength){
    numSides = newNumSides;
    sideLength = newSideLength;
}

是什么阻止它打印出来?

4

7 回答 7

1

由于您的构造函数没有初始化inscribedRadius并且您没有调用calcr(),因此 的值inscribedRadius保持为 0,这是在实例初始化期间分配给原始字段的默认值。

RegularPolygon poly = new RegularPolygon(4, 10);
poly.calcr();
System.out.println(poly.getr());

RegularPolygon这只有在您的类中执行上述代码时才有可能。因为您的方法是private在该类之外不可见。在这种情况下,您需要设置您的设计以便在calcr()内部调用。

于 2013-10-10T01:13:43.473 回答
1
// Just edit your getr() function. You have to call calcr() function 

public double getr(){
    calcr();
    return inscribedRadius;

}
于 2013-10-10T01:34:48.730 回答
0

你有没有在你的类中添加构造函数?

如果不添加

public RegularPolygon(int numSides, double sideLength){
this.numSides=numSides;
this.sideLength=sideLength;

}

然后打电话

poly.calcr();

在打印值之前。

你得到 0.0 因为你没有初始化 varalble 并且你没有调用方法来计算inscribedRadius

如果您尚未初始化任何 int 或 double 变量,则默认初始化将为 0。这就是您获得0.0.

于 2013-10-10T13:21:30.900 回答
0

尝试将其添加到您的 RegularPolygon 类中

public RegularPolygon(int numSides, double sideLength){
this.numSides=numSides;
this.sideLength=sideLength;

}

然后调用calcr();

于 2013-10-10T01:12:07.527 回答
0

您将需要添加一个构造函数来设置您定义的字段的值,然后在其中调用您的calcr()函数,以计算inscribedRadius. 此外, getr() 可能应该在RegularPolygon类中移动。

例如:

public class RegularPolygon {
  private int numSides; //# sides
  private double sideLength; //side length 
  private double inscribedRadius; //radius of inscribed circle

  public RegularPolygon(int numSides, double sideLength) {
    this.numSides = numSides;
    this.sideLength = sideLength;
    this.calcr();
  }

  private void calcr(){
    inscribedRadius = .5 * sideLength * 1/Math.tan(Math.PI / numSides);
  }

  public double getr(){
    return inscribedRadius;
  }
}

有关此代码的运行示例,请参阅http://ideone.com/lxcmlH

于 2013-10-10T01:12:51.863 回答
0

修改你的构造函数来计算半径

public RegularPolygon(int newNumSides, double newSideLength){
     numSides = newNumSides;
     sideLength = newSideLength;
     this.calcr();
}
于 2013-10-10T01:13:45.170 回答
0

当类RegularPolygon 被实例化时,因为你没有给inscribedRadius 字段赋一个初始化值,它的inscribedRadius 字段将被初始化为0.0。在你调用poly.getr()之前,你什么都不做,所以打印出来的只能是0.0。

于 2013-10-10T01:16:22.973 回答