【发布时间】:2018-07-01 13:17:34
【问题描述】:
我是 Android Java 编程的新手,我的测验问题(总共 50 个问题)重复出现时遇到了问题。我的问题和答案已添加到地图中。然后我调用我的方法 setQuestion() 来显示我的问题和答案,它们都运行良好。
Map<String, String> userQuestions = new HashMap<String, String>();
int questionNumber = 1;
//all my questions go here
setQuestion();
}
public void setQuestion()
{
Random randomQuestions = new Random();
List questions = new ArrayList<>();
List repeatedQuestions = new ArrayList<>();
for (int i = 0; i <questionNumber; i++)
{
while (true)
{
questionNumber = randomQuestions.nextInt(50) +1;
if (!questions.contains(randomQuestions))
{
repeatedQuestions.add(repeatedQuestions);
break;
}
}
}
}
我的第二次尝试:
List<String> list = new ArrayList<String>(userQuestions.keySet());
Collections.shuffle(list, new Random(questionNumber));
我尝试将我的 HashMap 转换为列表,希望能够使用 Collections.shuffle。不幸的是,这并没有改组,我的问题也不是随机的。
我的第三次尝试:
Random randomQuestions = new Random();
List<Integer> questions = new ArrayList<Integer>();
Integer questionNumber = randomQuestions.nextInt(50) + 1;
if (!questions.contains(questionNumber))
{
questions.add(questionNumber);
}
这确实使我的问题随机化,但我仍然得到重复。我真的很困惑为什么它没有添加我以前调用的问题编号?
【问题讨论】:
-
也许你的while语句有问题?如果问题是重复的,大多数原因是 while 语句。
-
当你做 questions.contains(randomquestions) 这真的没有按照你的想法做。你真的应该使用嵌套的 for 循环。但我也很难遵循您的代码,因为它的语法不正确
-
如果您有一个列表,假设有 1,000 个问题,然后您想随机选择 50 个问题。你会做一个基于 50 的 for 循环。使用 Random() 获取 1-1000 之间的随机数。一旦你有了这个, list.get(randomNumber) 得到那个问题。这是最简单的方法,如果您需要查看代码,请告诉我。
-
我为我的语法道歉,如果你能告诉我代码,我们将不胜感激。谢谢。我有 50 个问题,我想看看,然后测验结束。
-
请帮助,我尝试了许多不同的方法,但我无法防止重复。哈希映射是否无法防止重复条目?。
标签: java android for-loop while-loop repeat