После перемешивания массива переменная = массив [индекс] дает 0, трассировка (массив [индекс]) дает правильный номер - PullRequest
0 голосов
/ 16 августа 2011

Я думаю, было бы проще объяснить это так:

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
    }

1 Ответ

1 голос
/ 16 августа 2011

Кажется, что типы данных отличаются, и трассировка игнорирует тип данных при отображении. и num1 преобразует этот тип данных в int при получении, превращаясь в 0. Вы можете попробовать сравнить typeof arr2 [upTo] [0] и num1?

http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/operators.html?filter_flash=cs5&filter_flashplayer=10.2&filter_air=2.6#typeof

Еще одна вещь, которую я заметил в вашем коде:

        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] */
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...