我正在为Android构建测验应用。完成后,该应用程序有大约500个问题,存在多个类别。
我可以让问题正常工作,但只在一个例子中:问题是线性的,这意味着它们总是以相同的顺序出现,而问题总是以相同的顺序具有相同的答案(例如,问题1总是有答案A,B和C,问题2总是有答案D,E,F等。)我知道原因,因为我只是交换文本视图,基本上,但只是因为我不知道怎么做我想做的事。
到目前为止,问题只是在java文件中,因为我还处于pre-alpha阶段,但是一旦得到项目的框架,我计划将其移动到SQLite数据库。
答案 0 :(得分:0)
我的建议是你应该用一个包含0到499之间数字的整数数组随机化测验数组的顺序。所有问题都会显示但不是同一个顺序。要执行此操作,请参阅此帖子:Random shuffling of an array
第二种情况,如果我在你的位置,我会做出答案的数组,随机的答案,并从0到3取一个随机数作为正确答案的索引和
answer[random]=correctAnswer;
此致
答案 1 :(得分:0)
表示1)
记下从1到N的问题。 选择一个与剩余(包括)的未打击数字之间的随机数k。 从低端算起,找出尚未敲定的第k个问题,并将其写在别处。 从步骤2开始重复,直到所有数字都被删除。 在步骤3中记下的问题序列现在是原始数字的随机排列。
这只不过是你可以看到的Fischer Yates Shuffle http://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle
答案 2 :(得分:0)
请查看以下代码
//Take a list to store the index of already asked questions
HashSet<Integer> alreadyAskedQuestions = new HashSet<Integer>();
Random random = new Random();
//change the number according to your need
int maxQuestionCount = 500;
//Continue untill all the questions are completed
while (alreadyAskedQuestions.size() < maxQuestionCount) {
// Get a question that is not already asked
int currentQuestionIndex = random.nextInt(maxQuestionCount);
while (alreadyAskedQuestions.contains(currentQuestionIndex)) {
currentQuestionIndex = random.nextInt(maxQuestionCount);
}
// do something with current question
// Put the answers into a list
ArrayList<String> answers = new ArrayList<String>();
answers.add("right answer");
answers.add("wrong answer 1");
answers.add("wrong answer 2");
answers.add("wrong answer 3");
//Shuffle the answers
Collections.shuffle(answers);
// do something with the answers
// put the current question in the already asked list
alreadyAskedQuestions.add(currentQuestionIndex);
}
答案 3 :(得分:0)
如果我理解你的问题,你实际上需要一种有效的方法来随机化索引的问题......
这样做会有效地给你随机数
使用此号码作为存储问题的索引并显示
int t=(int)System.currentTimeMillis();
int index=t%500;
Access your question
Questions[index]
这将始终以随机顺序提出问题。
希望它对你有所帮助。