Что делать, если в операторе switch отключено предложение? - PullRequest
0 голосов
/ 15 февраля 2012

Извините за заголовок, я не знал, как его назвать.

Моя проблема в том, что у меня есть оператор 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;

        }

Для этого случайным образом выберите вопрос и затем добавьте его к следующему массиву, вот версия псевдокода:

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 голосов
/ 15 февраля 2012

Несколько способов реализации, но если у вас есть запас вопросов, и были ли они включены.Затем извлеките разрешенный из этого и используйте его count в качестве аргумента для rad.Таким образом, вы включили Вопросы 3 и 4, но заняли бы позиции 0 и 1 в списке разрешенных вопросов.

0 голосов
/ 15 февраля 2012

'Включен' глобальный или статический массив логических значений.Цикл генерации случайных чисел, пока вы не получите индекс, который обращается к истинному значению в массиве «Включено».Сохраняйте счетчик общего количества включенных вариантов из-за особого случая - «0» - возвращайте ошибку или вызывайте исключение, чтобы предотвратить бесконечный цикл в тщетной попытке найти правильный выбор.

...