StdDraw.line()循环 - 用于创建保龄球的轮廓

时间:2014-10-30 21:38:38

标签: java for-loop stddraw

它应该计算y轴,然后每次在不同的位置绘制一个小线段,并创建一个保龄球的轮廓。 x值永远不会改变所以它不会绘制任何东西。黑色填充圆圈就是为了确保它实际上正在绘制。

import java.util.Scanner;
public class test{
  public static void main(String args[])
  {
    double a0 = 1.27731344;
    double a1 = .85418707;
    double a2 = .032282353;
    double a3 = .127018447;
    double a4 = (-5.1957538)*(Math.pow(10,-2));
    double a5 = (6.718114)*(Math.pow(10,-3));
    double a6 = (-3.61828)*(Math.pow(10,-4));
    double a7 = (7.025)*(Math.pow(10,-6));  
    
    for(int i=0;i<=150;i++){
      for(double x=0;x<=1;x+=(1/150)){
      double x2 = x + (1/150);
      double y = Math.sqrt((a0)+(a1*x)+(a2*x)+(a3*x)+(a4*x)+(a5*x)+(a6*x)+(a7*x));
      StdDraw.line(x,y,x2,y);
      System.out.println(x+" "+y+" "+x2);
      }
     
  }StdDraw.filledCircle(.5,.5,.25);
 } 
}

1 个答案:

答案 0 :(得分:0)

行:for(double x = 0; x <= 1; x += (1 / 150))从0.0开始迭代,以1.0结尾,并在每次迭代后向x添加0.0。

要按1 / 150增加x,您必须将1 / 150更改为双倍值1.0 / 150

因此for循环变为for(double x = 0; x <= 1; x += (1.0 / 150))

然而,迭代双打是非常糟糕的做法,因为浮点数可能表现得如何。例如,以下代码:

double var = 1.7;
var -= 0.1;
System.out.println(var);

可能会打印1.6000007之类的内容。请在另一篇文章here中了解详情。

您应该找到另一种计算...计算的方法。底线是;总是迭代非浮点数。