如果在switch语句中禁用了子句怎么办?

时间:2012-02-15 15:53:09

标签: switch-statement

我很抱歉这个头衔,我不知道该怎么称呼它。

我的问题是这个,我有一个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,有哪些替代方案?

2 个答案:

答案 0 :(得分:0)

'启用'布尔值的全局或静态数组。循环随机数生成,直到获得一个索引来解决'Enabled'数组中的真值。保留已启用选项总数的计数,因为特殊情况 - “0” - 返回错误或引发异常以防止无用循环,无法找到有效选择。

答案 1 :(得分:0)

实施的几种方法 如果您有一堆问题,以及它们是否已启用。 然后从中启用提取并使用它的计数作为rad的参数。 所以你启用的问题将是3& 4但会占据0和0的位置已启用问题列表中的1。