Can someone help me with this error:
1180: Call to a possibly undefined method questionNum.
occurring on this line
var randomQ:Number = questionNum(qnum);
entire code here:
package exam {
import flash.net.* //to create URLRequest and load XML file
import flash.events.* //for Load events
//import flash.display.* //for testing purposes - remove when testing complete
//This class downloads the XML document, and then inserts info into arrays and variables.
//Also provides text of questions and correct answers when requested.
internal class XaMLDiplomat extends EventDispatcher {
//VARIABLES:
//for loaded XML doc
private var myXML:XML;
//for loading in XML
private var examLoader:URLLoader;
private var numQstns:Number; //count of total questions in a section
private var sectStart:Number;
//contains exam questions - ALL ARRAYS ARE ZERO RELATIVE -> actual question numbers = array index + 1
private var questions:Array;
//contain associated answer choices
private var choiceA:Array;
private var choiceB:Array;
private var choiceC:Array;
private var choiceD:Array;
private var choiceE:Array;
private var choiceF:Array;
//array of the correct answers
private var answers:Array;
private var questionNum:Array=[];
//CONSTRUCTOR
public function XaMLDiplomat () { //NEED TO ADD ARGUMENTS (docLocation)
//create URLRequest from argument
var examSite:URLRequest = new URLRequest("protected/Questions.xml");
//create a loader for the XML
examLoader = new URLLoader();
//add listener for load completion
examLoader.addEventListener(Event.COMPLETE, fullyLoaded);
examLoader.load(examSite);
//var ugly:Mixer = new Mixer(25);
}
//Load listener - creates XML object, and checks it for multiple sections. If multiple, it asks users
//which section they want - FIRST it needs to check database for any completed sections.
//If single, it goes ahead and starts array creation for first (& only) section
private function fullyLoaded (e:Event):void {
myXML = new XML(examLoader.data);
//myXML.prettyPrinting = false;
//still need to pull out SYSTEM data and pass it along...
var system:XMLList = myXML..SYSTEM;
var sysObj:Object = new Object();
sysObj.examTitle = system.TITLE.toString();
sysObj.totalMin = system.MINUTES.toString();
sysObj.retakePW = system.RETAKEPW.toString();
var numSections:Number = myXML..SECTION.length();
if (numSections == 1) {
generateArrays(1);
}
dispatchEvent(new MultiSectEvent(MultiSectEvent.SECTIONS, numSections, sysObj));
}
//Assigns arrays to instance variables for the selected section
internal function generateArrays (sectn:Number):void {
var whichSection:XMLList = myXML..SECTION.(@id == String(sectn));
var probList:XMLList = whichSection.PROBLEM;
numQstns = probList.length();
sectStart = Number(probList[0].@id);
questions = new Array();
choiceA = new Array();
choiceB = new Array();
choiceC = new Array();
choiceD = new Array();
choiceE = new Array();
choiceF = new Array();
answers = new Array();
for (var i:Number=0; i<numQstns; i++) {
var curProb:XMLList = probList.(@id == String(i+1));
if (curProb.QUESTION.hasSimpleContent()) {
questions* = curProb.QUESTION.toString();
}else {
//trace(curProb.QUESTION.toXMLString());
questions* = dropTags(curProb.QUESTION[0]);
}
questionNum.push(i);
choiceA* = curProb.CHOICE.(@letter == "a").toString();
choiceB* = curProb.CHOICE.(@letter == "b").toString();
choiceC* = curProb.CHOICE.(@letter == "c").toString();
choiceD* = curProb.CHOICE.(@letter == "d").toString();
choiceE* = curProb.CHOICE.(@letter == "e").toString();
choiceF* = curProb.CHOICE.(@letter == "f").toString();
answers* = curProb.CHOICE.(hasOwnProperty("@correct") && @correct == "true").@letter.toString();
}
questionNum=shuffle(questionNum)
}
//method for external classes to acquire text of current exam question
internal function getQuestion (qnum:Number):Object {
var returnObj:Object = new Object();
var randomQ:Number = questionNum(qnum);
returnObj.q = questions[randomQ];
returnObj.ca = choiceA[randomQ];
returnObj.cb = choiceB[randomQ];
returnObj.cc = choiceC[randomQ];
returnObj.cd = choiceD[randomQ];
returnObj.ce = choiceE[randomQ];
returnObj.cf = choiceF[randomQ];
returnObj.num = qnum;
//trace(randomQ);
return returnObj;
}
private function shuffle(a:Array) {
var p:int;
var t:*;
var ivar:int;
for (ivar = a.length-1; ivar>=0; ivar--) {
p=Math.floor((ivar+1)*Math.random());
t = a[ivar];
a[ivar] = a[p];
a[p] = t;
}
}
private function dropTags (txt:XML):String {
var txtString:String = "";
for each (var child:XML in txt.*) {
if (child.nodeKind == "text") {
txtString += child.toString();
}else {
txtString += " " + child.toXMLString();
}
}
//trace(txtString);
return txtString;
}
/*
private function dropTags (txt:String):String {
var sliceStart:Number = txt.indexOf(">");
var sliceStop:Number = txt.lastIndexOf("<");
return txt.slice((sliceStart+1), sliceStop);
}*/
internal function getAnswer (num:Number):String {
return answers[num];
}
internal function getQCount ():Number {
return numQstns;
}
internal function getSectStart():Number {
return sectStart;
}
//internal function getRealNum (num:Number):Number {
//return myMixer.getRandomNumber(num-1);
//}
}
}