2009-10-08 6 views
1

Je construis un court quiz où l'utilisateur doit saisir la signification d'un acronyme. Cela signifie que j'ai besoin de comparer une chaîne longue (généralement une phrase) tapée par l'utilisateur avec un acronyme. J'ai le sentiment que je ne le fais pas correctement. Pour mes tests, je suis en train de copier-coller la bonne réponse pour m'assurer que l'orthographe est correcte mais je reçois toujours le feedback que la réponse est incorrecte.Comparer des phrases (chaînes) dans AS3

Ma question est, est-ce que je compare correctement?

Voici mon code:

var arrQuestions:Array = [["LOL","Laughing Out Loud"], ["OMG", "Oh My God"], ["BTW", "By The Way"]]; 
var i:Number=0; 

    function setup():void { 
    quiztext_txt.text = arrQuestions[i][0]; 
    trace(quiztext_txt.text); 
    trace(arrQuestions[i][1]); 
    check_btn.addEventListener(MouseEvent.CLICK, clickHandler); 


    }//End of Setup() 

    setup(); 

    function clickHandler(event:MouseEvent):void { 

    var givenString:String; 
    var inputString:String; 
    inputString = userinput_txt.text; 
    givenString = arrQuestions[i][1]; 
    if (inputString == givenString) { 
     feedback_txt.text = "Correct!"; 


    } else { 
     feedback_txt.text = "Wrong!"; 
    } 
    } 
+0

Quelle est la variable i ici? Vous l'utilisez plusieurs fois, mais je ne le vois jamais initialisé. – spender

+0

Salut spender, je suis en train de modifier mon code pour que vous puissiez voir la variable i. Je l'utiliserai dans le futur pour passer à l'emplacement suivant dans le tableau. – Sarit

Répondre

0

Y at-il des espaces avant/après l'entrée utilisateur? La valeur de i est-elle différente?

else 
{ 
    //what does it trace? 
    trace("given answer: " + inputString + "\ncorrect answer: " + givenString); 
    feedback_txt.text = "Wrong!"; 
} 
+0

Salut Amarghosh, le je ne change pas encore pendant tout ce qui se passe, il va changer après avoir cliqué sur un bouton "Suivant". J'ai essayé votre code Else et d'après ce que je peux voir, les chaînes données et entrées sont correctes. Comment puis-je savoir s'il y a un espace indésirable? – Sarit

+1

trace (inputString.length + "," + givenString.length); – Amarghosh

0

essayez d'effacer le champ de texte dans votre fonction de configuration comme ceci:

function setup():void 
    { 
    userinput_txt.text = ""; 
    quiztext_txt.text = arrQuestions[i][0]; 
    trace(quiztext_txt.text); 
    trace(arrQuestions[i][1]); 
    check_btn.addEventListener(MouseEvent.CLICK, clickHandler); 


    }//End of Setup() 
0

Pour tout type de correspondance de chaîne Je recommande fortement la recherche dans les expressions régulières (RegExp). Dans l'expression régulière écrite ci-dessous je fais correspondre chaque mot, puis je dis [ ]+ ce qui signifie "au moins un ou plusieurs espaces", puis à la fin de l'expression j'utilise /gi pour dire que l'expression est insensible à la casse. Dans le code ci-dessus si je tape la phrase en minuscule ne va pas correspondre, une solution rapide pour cela serait d'utiliser ce if(inputString.toLowerCase() == givenString.toLowerCase()) qui attraperait cela. Heres l'exemple regexp:

// testString could easily equal myTextField.text 
var testString:String = "lauGHing  OuT  loUD"; 

// you could store each one in an array, as you were before 
var regEx:RegExp = /laughing[ ]+out[ ]+loud/gi 

trace(regEx.test(testString)); //returns true,test() returns a Boolean 

Espérons que cela aide.

Questions connexes