首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >StdDraw.line()循环-用于创建保龄球的轮廓

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

Stack Overflow用户
提问于 2014-10-31 05:38:38
回答 1查看 653关注 0票数 0

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

代码语言:javascript
复制
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);
 } 
}

EN

回答 1

Stack Overflow用户

发布于 2014-10-31 05:56:54

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

要使x递增1 / 150,必须将1 / 150更改为双精度值1.0 / 150

因此,for循环被更改为for(double x = 0; x <= 1; x += (1.0 / 150))

然而,由于浮点数的行为方式,迭代双精度值是非常糟糕的做法。例如下面的代码:

代码语言:javascript
复制
double var = 1.7;
var -= 0.1;
System.out.println(var);

可能会打印像1.6000007这样的内容。在另一篇文章here中阅读更多关于这方面的内容。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26663789

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档