Loop函数将不准确的值添加到变量,并且在跟踪代码时未定义数组。如何解决?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Loop函数将不准确的值添加到变量,并且在跟踪代码时未定义数组。如何解决?相关的知识,希望对你有一定的参考价值。

[我在ACS3中进行了弹丸运动仿真,其中一个功能涉及创建多维数组,该多维数组在给定输入角度和速度的情况下将时间与球的高度相对应绘制。

当我跟踪这些值时,'t'变量应该以0.1为增量,但是,在某些情况下,它为我提供了近似值(例如,不是0.8,而是0.7999999...。)。此外,数组的值为'undefined'。

我不知道还有什么可以尝试的,因为如果循环中的变量是t = t + 0.1 ;,则不应显示任何近似值。

[我也试图添加速度* Math.sin(angle /(180 / Math.PI))而不是vy(y速度分量)。

shoot.addEventListener(MouseEvent.CLICK, Calculate);

function Calculate(event:MouseEvent):void{

var t = 0;
var position:Array = new Array();

var vy = velocity*Math.sin(angle/(180/Math.PI));
var Time = int(((2*vy)/9.81)*100)/100
    time_txt.text = Time;

while (t <= Time){

    position[t]= (vy*t)-4.905*(t*t);
    t = t + 0.1;
    trace(t);
    trace(position[t]);

}

}

我希望控制台打印正确的时间间隔(0.1,0.2,0.3 ...)以及计算出的位置值,而不是'undefined'(这是基于SUVAT方程的)。因此,预期结果将如下所示:

0.1

((在时间0.1处的计算位置)

0.2

((在时间0.2处的计算位置)

0.3

((时间0.3的计算位置)

...一直继续到变量't'大于计算的'时间'。

相反,我得到:

0.1

未定义

0.2

未定义

0.30000000000000004 //底线是...这是怎么回事?

未定义//还是这个?

0.4

未定义

0.5

未定义

0.6

未定义

0.7

未定义

0.7999999999999999

未定义

0.8999999999999999

未定义

等...

答案
  • 当我追踪这些值时,“ t”变量应该具有0.1的增量,但是,在某些情况下,它为我提供了近似值(例如,代替了0.8,它给了我0.7999999。 ..)。
  • 此外,数组的值为undefined

这里是一个可测试的示例代码,可能有助于解决您的问题。它在做什么吗?

function Calculate(event:MouseEvent):void { var velocity :int = 4; //temp for testing var angle :int = 45; //temp for testing var t :Number = 0; var position :Array = new Array(); var pos_idx :int = 0; //your position within the array var vy = velocity*Math.sin(angle/(180/Math.PI)); //var Time = int(((2*vy)/9.81)*100)/100 var Time :Number = 6.5; //temp small value for testing time_txt.text = Time; while(t <= Time) { position[ pos_idx ] = (vy * t) - 4.905 * (t * t); trace("position[" + pos_idx + "]: " + position[ pos_idx ] ); t += 0.1; t = Number( t.toFixed(3) ); //rounding down the fraction part trace("t is: " + t); pos_idx += 1; //add +1 for next position within array } }

关于您的问题:

((1)数组位置为“ undefined”的问题是因为数组的位置是整数而不是分数。数组表示“事物组”(thing1,thing2,thing3等),因此,例如,如果您的事物是门,那么您可以查看Door #1Door #2,但是如果尝试检查Door #0.8,则编译器将失败]。

((2)在编程语言中,整数是整数(对于小数,请使用NumberFloatLong)。

您的代码var Time :int = int( ((2*vy)/9.81) * 100) / 100;的结果可能为

(例如:当angle为45时),因为((2*vy)/9.81) * 100) / 100;的结果为0.5766416156465218,但是如果将其强制转换为int,则现在忽略小数部分,因此将其四舍五入为0的结果。

((3)

PS:在运行很长时间的While循环中使用轨迹时要小心。如果必须在每个循环中报告一个trace,这可能会暂时冻结您的应用程序。 Time越大,冻结时间越长。

以上是关于Loop函数将不准确的值添加到变量,并且在跟踪代码时未定义数组。如何解决?的主要内容,如果未能解决你的问题,请参考以下文章

java.lang.ArrayStoreException:将不正确类型的值分配给 Object [] 数组时 [重复]

解决zend studio代码无法自动提示以及代码跟踪函数和变量的问题

是否可以跟踪未分配的值?

Python从菜鸟到高手(17):改变函数参数的值

Google 跟踪代码管理器 - 将 CSP 随机数添加到自定义 HTML 代码段的任何可能方式?脚本属性被剥离

BeautifulSoup 将不需要的换行符添加到字符串 Python3.5