【发布时间】:2014-01-23 17:39:19
【问题描述】:
我的朋友在 Facebook 上发布了这个问题,我也不知道是怎么回事。
考虑这段代码:
var num:Array = new Array();
var i:int, sum:int = 0;
for(i=0; i<100; i++) num[i] = 0;
for(i=0; i<100; i++) num[Math.floor(Math.random()*100)] += 1;
for(i=0; i<100; i++) sum += num[i];
trace(sum);
应该总和为 100,但每次运行时打印不同的数字,有时 sum 变得大于 100。(即使 sum 的类型为 Number 或 * 和 1 也是相同的更改为其他一些数字,例如 0.1;结果与 10.0 不接近 - 不是,例如 9.9999993。)
同时,这些代码工作正常。
var num:Array = new Array();
var i:int, sum:int = 0;
for(i=0; i<100; i++) num[i] = 0;
for(i=0; i<100; i++) num[Math.floor(Math.random()*100)]++;
for(i=0; i<100; i++) sum += num[i];
trace(sum);
和
var num:Array = new Array();
var i:int, sum:int = 0;
for(i=0; i<100; i++) num[i] = 0;
for(i=0; i<100; i++){
var tmp:Number = Math.floor(Math.random()*100);
num[tmp] += 1;
}
for(i=0; i<100; i++) sum += num[i];
trace(sum);
all 始终正确打印 100。
另外,这段 JavaScript 代码可以正常工作
var num = new Array();
var i, sum = 0;
for(i=0; i<100; i++) num[i] = 0;
for(i=0; i<100; i++) num[Math.floor(Math.random()*100)] += 1;
for(i=0; i<100; i++) sum += num[i];
console.log(sum);
当console.log 更改为trace 并作为AS2 或AS3 代码运行时,情况并非如此。是什么导致了这种行为?
(使用的是 Adobe Flash CS6,似乎针对哪个 Flash Player(安装的版本为 12.0.0.38)以及使用的是 AS2 还是 AS3 都无关紧要;甚至“AIR 3.2 for Desktop”的行为都一样。)
【问题讨论】:
-
Facebook 上的其他人刚刚找到原因;
a[x] += b被编译为a[x] = a[x] + b和...
标签: actionscript-3 actionscript