清除我的数组将保留空白数组位置

问题描述 投票:-1回答:1

因此,我遇到了AS3类的问题,该类未按照我需要的方式运行。这是一个简单的问题,但是导致它的方法却很复杂。

[首先,我正在构建的“测验”有6个问题,它们是作为类运行在Shell中作为外部SWF加载的。首先,我们声明一个var“ a_quiz”来保存从外部SWF推送的6个值。将这6个值还原为一个字符串,然后针对另一个包含正确答案的数组进行检查。下面的loadQuiz函数旨在启动三个随机测验之一,并清除a_quiz数组,以便可以采用新的答案:

public function loadQuiz():void {
            a_quiz.length=0;
            trace("loadQuiz");
            n_quizCorrect = n_quizScore = 0;
            n_currentQuiz = Math.floor(Math.random() * (n_totalTopics - n_quizStart + 1) + n_quizStart);
            loadTopic(n_currentQuiz);
        }

现在,我已经测试了Shell,并确认每次都会触发“ loadQuiz”跟踪。第一次加载测验时,一切都会正常进行。这6个问题可跟踪正确或不正确的响应,并将6个二进制值压入a_quiz数组。输出看起来像这样:

loadQuiz
incorrect
correct
incorrect
incorrect
incorrect
incorrect
0,1,0,0,0,0
you failed

然后我跳回到主菜单并再次启动。这将重新部署loadQuiz函数。函数的第一行:

a_quiz.length=0;

应该清空a_quiz数组以接受新的答案进行标记。但是,当我完成测验时,我得到的是:

loadQuiz
correct
correct
correct
correct
correct
correct
,,,,,,1,1,1,1,1,1
you failed

出于某些我无法理解的原因,push值堆叠在空位置的顶部,因此当字符串比较时……它们将不匹配。这是怎么回事?

推送功能:

function handleClick(evt:MouseEvent):void{
    var tempCORRECT = a_answerSheet.toString();
    var tempSELECTION = a_selected.toString();
    //
    if(tempSELECTION == tempCORRECT){
        trace('correct');
        parentObj1.a_quiz[ parentObj1.n_currentQuestion - 1 ] = 1;
    }else{
        trace('incorrect');
        parentObj1.a_quiz[ parentObj1.n_currentQuestion - 1 ] = 0;
    }
    parentObj1.n_currentQuestion ++;
    // GOTO NEXT SLIDE

    parentObj1.LOADNEXT('up');
}
arrays actionscript-3
1个回答
0
投票

问题源于测验本身的加载。

您可以在handleClick函数上看到:

parentObj.n_currentQuestion++

在parentObj的时间轴上增加了一个称为n_currentQuestion的整数变量。然后,问题出在当使用此函数加载测验时,测验如何记录n_currentQuestion:

public function loadQuiz():void {
            a_quiz= [];
            trace("loadQuiz");
            n_quizCorrect = n_quizScore = 0;
            n_currentQuiz = Math.floor(Math.random() * (n_totalTopics - n_quizStart + 1) + n_quizStart);
            loadTopic(n_currentQuiz);
        }

因此,要纠正该错误,我需要在loadQuiz中添加一行,以便始终将n_currentQuestion设置为1进行加载。

public function loadQuiz():void {
            a_quiz= [];
            n_currentQuestion = 1;
            trace("loadQuiz");
            n_quizCorrect = n_quizScore = 0;
            n_currentQuiz = Math.floor(Math.random() * (n_totalTopics - n_quizStart + 1) + n_quizStart);
            loadTopic(n_currentQuiz);
        }
© www.soinside.com 2019 - 2024. All rights reserved.