2012-02-15 46 views
0

对于标题我很抱歉,我不知道该怎么称呼它。如果在switch语句中禁用子句,该怎么办?

我的问题是这样的,我有一个随机选择问题类型为这样的switch语句:

questionType[count] = rad.nextInt(4); 

     switch (questionType[count]) 
     { 
     case 0: 

       questionArray[count] = new Times(count + 1); 
       ((Times) questionArray[count]).askQuestion(question); 
       break; 

     case 1: 

       questionArray[count] = new Add(count + 1); 
       ((Add) questionArray[count]).askQuestion(question); 
       break; 

     case 2: 

       questionArray[count] = new Minus(count + 1); 
       ((Minus) questionArray[count]).askQuestion(question); 
       break; 

     case 3: 

      questionArray[count] = new Divide(count + 1); 
      ((Divide) questionArray[count]).askQuestion(question); 
      break; 

     } 

这样做是随机选择一个问题,然后将其添加到下一个阵列,这里是pesudocode版本:

questionType = random(4) 

case questionType == 0 
do something 
break 

case questionType == 1 
do something 
break 

case questionType == 2 
do something 
break 

case questionType == 3 
do something 
break; 

现在可以说,我不希望任何为1或2的,我怎么把那个生效?我正沿着这个线路思考的东西:

START: 

    questionType = random(4) 


     case questionType == 0 
    if(0 enabled) 
    { 
     do something 

     break 
    } 

     case questionType == 1 
    if(1 enabled) 
    { 
     do something 
     break 
    } 

     case questionType == 2 
    if(2 enabled) 
    { 
     do something 
     break 
    } 


     case questionType == 3 
    if(3 enabled) 
    { 
     do something 
     break; 
    } 
else goto start 

但是,这是非常低效的代码,并使用一个goto,有什么办法?

+0

难道你不只是在switch语句之前进行检查,而不是检查每种情况下是否启用? – 2012-02-15 15:58:16

+0

我可以,但除非我为每个组合做了switch语句,否则这些用法都没有多大用处。 – Derek 2012-02-15 15:59:39

+0

我不认为我完全清楚你想要完成什么。但是,如果将switch语句移至返回布尔值的方法(如果它添加了一个问题或者“执行某些操作”,则返回true,否则为false)会怎么样?然后,您可以循环并调用该方法,直到完成(没有足够的信息告诉您要检查的内容)。请注意,从您的代码,但如果你循环尝试随机数字试图获得启用问题,你可能会遇到问题... – 2012-02-15 16:12:18

回答

0

有几种实现方式,但是如果您有问题存储以及是否已启用,则可以使用 。 然后从中提取启用并使用它的计数作为rad的参数。 所以你启用问题将是3 & 4,但将占用启用问题列表中的位置0 & 1。

0

'启用'全局或静态布尔数组。围绕随机数生成循环,直到获得一个索引,该索引在'已启用'数组中找到真值。由于特殊情况 - '0',保留已启用选项的总数。 - 返回错误或引发异常,以防止无限循环尝试找到有效的选项。