2012-08-23 43 views
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(); 

回答

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; 
+0

谢谢,这帮了我很多! – bsberti

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; 
} 

我相信,你的代码会更可读,可升级且不易出错的方式。