3

我不确定从哪里开始,寻找正确方向的推动力。我正在使用 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" />
4

6 回答 6

2

你总是可以做这样的事情:

SELECT TOP 3 * FROM QuestionsTable ORDER BY NEWID()

有关它如何工作的解释,请参见此处:“order by newid()” - 它是如何工作的?

于 2013-04-09T13:38:50.610 回答
0

如果您对获得 3 个随机不重复的问题非常挑剔,那么您可以尝试:

在您有问题的 SQL 表中,如果没有,则必须有一个与它们关联的 ID 字段,然后创建一个,现在由于您有 10 个问题,ID 将在 1-10 之间。

现在在您的 c# 代码中,您可以创建 Method 它将获得:

Random random = new Random();
int randomNumber = random.Next(1, 10);

现在构建一个 SQL 查询“ Select * from tab where ID = randomNumer”(针对第一个问题)。

将 randomNumber 存储在临时数组或列表中(用于比较目的)并再次调用相同的方法并将其与现有数字进行比较(您可以使用Contains()返回 bool 的方法来简单地进行操作)如果它不相似,则将其添加到数组中并继续发布这个问题。

您必须跟踪数组/列表的大小(如果 < 3 则继续,否则退出)。

这必须为您锻炼,我使用相同的算法为一家公司创建了一个入学测试,不幸的是找不到代码。

祝你好运

于 2013-04-09T14:06:43.413 回答
0

使用随机排序的 SQL 查询:

SELECT * FROM QuestionsTable ORDER BY RAND() LIMIT 3
于 2013-04-09T13:37:52.163 回答
0

这听起来像Random也许你正在寻找什么。特别是,您应该看看Random.Next(int maxValue)方法。

如果我必须做这样的事情,我会收集问题并使用上述功能来抓取随机问题。不过,您必须通过选择相同的问题来解决问题。

于 2013-04-09T13:42:14.600 回答
0

如果您没有很多问题,并且它们将保持不变,那么安装整个数据库可能会过大。

您可以在字符串(或更复杂的包含 ID 和字符串的对象)上使用 ArrayList,并使用随机函数三次来选择 3 个不同的元素。

当然,您必须确认您没有选择相同的问题。

你之后做什么取决于你是否想存储答案。

于 2013-04-09T13:56:40.620 回答
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};

在此之后,您将获得随机不重复的三个问题顺序

于 2013-04-09T13:48:21.393 回答