我不知道从哪里开始,寻找正确的方向。我正在使用C#。我需要向用户显示三个问题,但是我需要随机选择并在每个页面加载时显示这些问题。如果您的解决方案认为它是最简单的方法,我可以使用MS SQL。
我有一个10个问题的列表,我希望一次显示三个问题并随机选择它们。做这个的最好方式是什么?
目前设置如下..
<p> <label class="checkbox"><asp:CheckBox ID="QuesChk1" Value="1" Text="What street do they live on?"
runat="server" /></label></p>
<p> <label class="checkbox"><asp:CheckBox ID="QuesChk2" Value="2" Text="What is their middle name?"
runat="server" /></label></p>
<p> <label class="checkbox"><asp:CheckBox ID="QuesChk3" Value="3" Text="What branch do they visit the most?"
runat="server" /></label></p>
<asp:Button ID="Button1" OnClick="Next_Click" runat="server" Text="Next" />
答案 0 :(得分:2)
您可以随时执行以下操作:
SELECT TOP 3 * FROM QuestionsTable ORDER BY NEWID()
请点击此处查看有关工作原理的说明:"order by newid()" - how does it work?
答案 1 :(得分:0)
使用随机排序的SQL查询:
SELECT * FROM QuestionsTable ORDER BY RAND() LIMIT 3
答案 2 :(得分:0)
听起来像Random或许你正在寻找的东西。特别是,您应该查看Random.Next(int maxValue)方法。
如果我必须做这样的事情,我会收集一些问题,并使用上面提到的功能来获取随机问题。但是,您必须通过选择相同的问题来解决问题。
答案 3 :(得分:0)
如果您不想使用数据库并且已修复所有10个问题,请使用viewstate
之类的东西ViewState["Questions"] = new List<string>();
并向其添加问题
然后还有一个查看状态来检查您获得的订单是否不是最后一个订单
ViewState["LastOrder"] = new List<int>(){1,2,3};
然后生成随机订单,直到它不是最后一个
int firstIndex, secondIndex, thirdIndex;
var lastOrder = (List<int>)ViewState["LastOrder"];
Random r = new Random(lastOrder[0] + lastOrder[1] + lastOrder[2]);
while(firstIndex == lastOrder[0])
firstIndex = r.Next(1, 10);
while(secondIndex == lastOrder[1] || secondIndex == firstIndex)
secondIndex = r.Next(1, 10);
while(thirdIndex == lastOrder[2] || thirdIndex == firstIndex || thirdIndex == secondIndex)
thirdIndex = r.Next(1, 10);
// update current index as last index
ViewState["LastOrder"] = new List<int>(){firstIndex, secondIndex, thirdIndex};
在此之后,您将获得随机不重复的三个问题顺序
答案 4 :(得分:0)
如果您没有太多问题,并且它们将保持静态,那么安装整个数据库可能会有点过分。
您可以在字符串上使用ArrayList(或者包含ID和字符串的更复杂的对象)并使用随机函数三次来选择3个不同的元素。
当然,您必须验证您没有选择相同的问题。
你做的事情取决于你是否想要存储答案。
答案 5 :(得分:0)
如果您非常关注获得3个随机不重复的问题,那么您可以尝试:
在你有问题的SQL表中,你必须有一个ID字段,如果没有,那么创建一个,现在因为你有10个问题,ID将在1-10之间。
现在在c#代码中,您可以创建将获得的方法:
Random random = new Random();
int randomNumber = random.Next(1, 10);
现在构建一个SQL查询“Select * from tab where ID = randomNumer
”(对于第一个问题)。
将randomNumber存储在临时数组或列表中(用于比较目的)并再次调用相同的方法并将其与现有数字进行比较(您可以通过使用返回bool的Contains()
方法简单地执行此操作)不相似然后将其添加到数组并继续发布此问题。
你必须跟踪数组/列表大小(如果&lt; 3然后继续退出)。
这必须为您锻炼,我已经为使用相同算法的公司创建了入学考试,遗憾的是无法找到代码。
祝你好运