我很抱歉这个头衔,我不知道该怎么称呼它。
我的问题是这个,我有一个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 :(得分:0)
'启用'布尔值的全局或静态数组。循环随机数生成,直到获得一个索引来解决'Enabled'数组中的真值。保留已启用选项总数的计数,因为特殊情况 - “0” - 返回错误或引发异常以防止无用循环,无法找到有效选择。
答案 1 :(得分:0)
实施的几种方法 如果您有一堆问题,以及它们是否已启用。 然后从中启用提取并使用它的计数作为rad的参数。 所以你启用的问题将是3& 4但会占据0和0的位置已启用问题列表中的1。