我认为最简单的解释一下:
num1 = arr2[upTo][0];
trace(num1);
输出:0
trace(arr2[upTo][0]);
输出:正确数字
其中arr2是一个混洗数组。
我的代码:
public class Main extends MovieClip {
var num1:int;
var num2:int;
var scoreArr:Array = new Array();
var upTo:int = 0;
var arr2:Array = new Array();
public function Main() {
for (var i = 1; i <= 9; i++) {
for (var j = 1; j <= 9; j++) {
scoreArr.push([i,j]);
}
}
while (scoreArr.length > 0) {
arr2.push(scoreArr.splice(Math.round(Math.random() * (scoreArr.length - 1)), 1));
}
newQ();
}
private function newQ():void {
num1 = arr2[upTo][0];
num2 = arr2[upTo][1];
trace(num1); //outputs: 0
trace(arr2[upTo][1]); //outputs: correct number
}
答案 0 :(得分:1)
似乎数据类型不同,跟踪在显示时忽略数据类型。 并且num1在获取分配时将该数据类型转换为int,变为0。 你能尝试比较typeof arr2 [upTo] [0]和num1吗?
我在代码中注意到的另一件事:
num1 = arr2[upTo][0];
num2 = arr2[upTo][1];
trace(num1); //outputs: 0 ,Here num1 is assigned arr2[upTo][0]
trace(arr2[upTo][1]); /*outputs: correct number . But
here you trace arr2[upTo][1] and
not arr2[upTo][0] */