1

任意の項ベクトル answer1 が任意の項ベクトル rightAnswer1 とは異なることを証明する行に到達したら、関数スイッチ/ケースを終了する必要があります (条件内: "answer1[i1] != rightAnswer1[i1]")

switch (currentFrame)
{
    case 1:
        for (var i1:int = 0; i1 < 8; i1++)
        {
            if (answer1[i1] != rightAnswer1[i1])
            {                   
                anyArray[currentFrame - 1] = 2;
                trace("Answer " + i1 + " is wrong!");
                break; // I need to leave the switch/case function here
            }
        }

        trace("Answer is right!");
        anyArray[currentFrame - 1] = 1;

        break;

    case 2:
        for (var i2:int = 0; i2 < 3; i2++)
        {
            if (answer2[i2] != rightAnswer2[i2])
            {                   
                anyArray[currentFrame - 1] = 2;
                break;
            }
        }           
        anyArray[currentFrame - 1] = 1;
        break;

    default:
        trace("ERROR");
    break;
}

if (anyArray[currentFrame - 1] == 1)
    light.play();
else
    error.play();
4

2 に答える 2

8

スコープがブレークアウトすることを示すラベルをbreakステートメントに渡します。

outside:
switch (currentFrame)
{
    case 1:
        for (var i1:int = 0; i1 < 8; i1++)
        {
            if (answer1[i1] != rightAnswer1[i1])
            {                   
                anyArray[currentFrame - 1] = 2;
                trace("Answer " + i1 + " is wrong!");
                break outside; 
            }
        }

        trace("Answer is right!");
        anyArray[currentFrame - 1] = 1;

        break;
于 2012-08-23T15:09:20.590 に答える
2

cleongが答えたようにラベルを追加することもできますが、コードを不必要に複雑にする傾向があるため、それらを避けることをお勧めします. ラベルを追加する必要があると思うたびに、状況を処理するためのよりクリーンで明確な方法がおそらくあります。

例:この特定のコードでは、検証を処理する関数を記述できるため、ラベルの必要性がなくなり、ケースの冗長性がすべてなくなります。

switch (currentFrame)
{
    case 1:
        validateAnswer(answer1, rightAnswer1);
        break;

    case 2:
        validateAnswer(answer2, rightAnswer2);
        break;

    default:
        trace("ERROR");
        break;
}

...をちょきちょきと切る...

private function validateAnswer(userAnswer:Array, rightAnswer:Array):Boolean
{
    for (var i:int = 0; i < rightAnswer.length; i++)
    {
        if (userAnswer[i] != rightAnswer[i])
        {                   
            anyArray[currentFrame - 1] = 2; //assuming that anyArray and currentFrame are class members
            return false;
        }
    }           
    anyArray[currentFrame - 1] = 1;
    return true;
}

そうすれば、コードがはるかに読みやすく、スケーラブルになり、エラーが発生しにくくなると思います。

于 2012-08-23T20:31:21.430 に答える