2012-02-15 78 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',保留已啓用選項的總數。 - 返回錯誤或引發異常,以防止無限循環嘗試找到有效的選項。