这不是一个真正的问题,因为修复很简单,而且成本很低。我猜这是我不了解的某种特性,for
或者uint
我只是想知道发生了什么...
使用ActionScript 3,我建立了一个for
循环,以向后遍历的元素Vector
。
var limit:uint = myVector.length-1;
for(var a:uint = limit; a >= 0; a--)
{
trace(a);
}
当我运行此代码时,它会2, 1, 0
按预期输出,然后继续执行4294967295
并从那里开始递减计数,直到循环超时并抛出一个Error #1502
。
解决方法是简单地键入a
作为int
,而不是uint
,但我不知道为什么。当然,我正在处理0或更大的值,所以uint
正确的数据类型正确吗?
我想这4294967295
是的最大值,uint
但是我的计数如何到达那里?
如果你这样做
var myUint:uint = 0;
trace(myUint - 1);
那么输出是-1
为什么,为什么在我的循环中我应该突然跳回至4294967295
?
抱歉,您的问题有些杂乱无章,并为您的任何帮助而欢呼。
你近了。如您所说,您的循环为您提供2、1、0、4294967295。这是因为uint不能为负。您的循环将始终运行一段时间,a >= 0
并且因为它永远不会为-1来打破循环条件,所以它将永远循环下去。
var myUint:uint = 0;
trace(myUint - 1);
我没有对此进行测试,但是可能发生的是myUint被转换为一个int,然后减去了1。下面的代码应该能够确认这一点。
var myUint:uint = 0;
trace((myUint - 1) is uint);
trace((myUint - 1) is int);
要修复循环,可以使用int,也可以在for each(var x:Type in myVector)
不需要索引(a
)的情况下使用循环。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句