跟踪和存储阵列(AS3)

时间:2014-08-02 14:49:22

标签: arrays actionscript-3

我有一个数组,其中使用列表响应记录对每个问题的响应。 for 循环,一旦到达数组中的最后一个问题,另一个按钮(标题为" continue")将变为可见。一个人点击这个现在可见的按钮继续任务。我的代码中有两个跟踪命令,一个在for循环中,一个在for中,当单击继续按钮时。 for循环中的trace函数有效;但是,单击“继续”按钮时在函数中执行的跟踪将返回" undefined"值。 (如果我的描述不清楚,我将使用下面的代码使其更加具体。)

我的问题是为什么跟踪的完全相同的值会在一个实例中返回值而不是另一个实例中的值?我的目标是将对数组中问题的响应存储到String中。

var listOfQuestions:Array = new Array;
var listOfAnswers:Array = new Array;
var i:int = 0;

listOfQuestions[0] = "Question 1";
listOfQuestions[1] = "Question 2";
listOfQuestions[2] = "Question 3";


lstResponses.addItem({label: "Response 1", data: "1"});
lstResponses.addItem({label: "Response 2", data: "2"});
lstResponses.addItem({label: "Response 3", data: "3"});

btnNextQuestion.addEventListener(MouseEvent.CLICK, presentNextQuestion);  

function presentNextQuestion(evt:MouseEvent){
    listOfAnswers[i] = lstResponses.selectedItem.data;
    lstResponses.selectedItem = null;
    i++;

    //Present the element stored in index “i”;
    if(i == listOfQuestions.length)
    {
        txtQuestion.htmlText = "<b>End of list. Click the Continue to Part II for the next part.</b>", btnContinue.visible = true, btnNextQuestion.visible = false;
        //Output all the questions and answers;
        for (i = 0; i <listOfQuestions.length; i++)
        {
        trace(i, listOfQuestions[i], listOfAnswers[i]);
        }
    }
    /*If there are more elements left, present the element stored in index “i.”*/
    else
    {
        txtQuestion.htmlText = listOfQuestions[i];
    }
}

btnContinue.addEventListener(MouseEvent.CLICK, continueClicked);
function continueClicked(evt:MouseEvent){
    trace(listOfAnswers[i]);
}

使用上面的代码重申我的问题:

 trace(i, listOfQuestions[i], listOfAnswers[i])

产生预期结果,即0问题1 [响应]。但是,

trace(listOfAnswers[i]);

在代码的最后一行产生&#34; undefined&#34;。

我还想知道这个错误是否是由于需要转换为字符串的数据造成的。在这方面,我添加了以下代码(见下文),但我收到的错误是:错误#1010:术语未定义且没有属性。

var b:String = new String;
b = listOfAnswers[i].toString()
b = listOfAnswers[i].join("");

感谢您的时间和耐心。

1 个答案:

答案 0 :(得分:1)

问题似乎是当您单击“继续”按钮时如何跟踪答案。您正在追踪i索引处的答案,但您的代码不会阻止i超出列表的长度。

我的猜测是你点击下一个按钮,直到它告诉你已到达列表的末尾,然后才点击继续按钮。如果是,i将为3,并且您正在尝试跟踪listOfAnswers [3],这比列表的长度多一个,为您提供undefined

尝试替换

trace(listOfAnswers[i]);

for (i = 0; i <listOfQuestions.length; i++)
{
    trace(listOfAnswers[i]);
}