C# asp.net C中的非重复随机数

C# asp.net C中的非重复随机数,c#,asp.net,random,numbers,C#,Asp.net,Random,Numbers,我在6 asp.net面板服务器控件中有6个问题, 我需要以随机顺序一个接一个地给他们看,每次都有一个问题是可见的,另一个是不可见的 我不知道如何排除再次生成的数字。 我这样写: protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { Random rnd = new Random();

我在6 asp.net面板服务器控件中有6个问题, 我需要以随机顺序一个接一个地给他们看,每次都有一个问题是可见的,另一个是不可见的

我不知道如何排除再次生成的数字。 我这样写:

    protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                Random rnd = new Random();
                int startNumber = rnd.Next(1, 6);
                ShowNextPanel(startNumber);
            }
        }

    private void ShowNextPanel(int excludeNumber)
    {
        Random rnd = new Random();
        //I need to exclude the "excludeNumber" here but I don't know how !?
        int number = rnd.Next(1, 6);
        switch (number)
        {
            case 1:
                {
                    Panel1.Visible = true;
                    break;
                }
            case 2:
                {
                    Panel2.Visible = true;
                    break;
                }
            case 3:
                {
                    Panel3.Visible = true;
                    break;
                }
            case 4:
                {
                    Panel4.Visible = true;
                    break;
                }
            case 5:
                {
                    Panel5.Visible = true;
                    break;
                }
            case 6:
                {
                    Panel6.Visible = true;
                    break;
                }
        }

    }
    protected void Button1_Click(object sender, EventArgs e)
    {
       // InsertToDB(1, DropDownList1.SelectedValue);
        Panel1.Visible = false;
        ShowNextPanel(1);

    }
    protected void Button2_Click(object sender, EventArgs e)
    {
       // InsertToDB(2, DropDownList2.SelectedValue);
        Panel2.Visible = false;
        ShowNextPanel(2);

    }
//and go on till button6_click

您可以将已显示的面板标记为“已看到”,如果已标记所选的随机数,则转到下一个面板i++直到找到一个未标记的面板。

您需要一个面板/索引列表,然后将其与示例一起混洗

您可以将数字放入列表中,并根据列表中的剩余项目生成随机数,而不是根据实数

Random random = new Random();
List<int> nums = new {1, 2, 3, 4, 5, 6}; // or whatever you need to put there.
List<int> result = new List<int>(); // will hold your results in order.
while(nums.Count > 0){
    int idx = random.next(0, nums.Count);
    result.add(nums[idx]);
    nums.RemoveAt(idx);
}
return result;

您不必在nums列表中使用int值;它可以是你的问题对象,或者你需要的任何东西;您将获得随机顺序的项目。

从所有面板编号的列表开始:

var panels = new List<int>() { 1, 2, 3, 4, 5, 6 }

当panels.Count==0时,用所有数字重新初始化它。

创建与此类似的实例随机类:random random=new Random0;
为随机类定义种子

在C页面中编写以下类

int RandNo = 0;

private int RandomNumber(int min, int max)
{
    Random random = new Random();
    return random.Next(min, max);
}
然后根据需要调用以下方法

RandNo = RandomNumber(10000000, 99999999);
Response.Write(RandNo);

我只想将每个问题显示一次,我需要以随机方式逐个显示。这是最简单的解决方案,但会扭曲随机性,例如,如果第一个面板是第三个面板,您现在看到第四个面板的可能性是任何其他面板的两倍。在会话中保存一个数组-bool[]panelsShown=new bool[6];生成随机数时,只需检查单元格是否已标记为true,如果是,则将其标记为true并显示,否则请执行i++操作,直到找到未标记的单元格,然后选择并标记它。如果所有面板都已标记,请确保循环不会是无限的。如果使其真正随机对您很重要,请计算剩余的未标记面板数,并从未标记面板数中选择一个随机数。例如,如果您的数组是FFTFTF,并且您选择了一个最大为4的随机数。这个答案是错误的;它不会阻止以前选择的面板再次被选择,而且,因为它使用了一个恒定的种子,所以每次都会导致序列相同。
RandNo = RandomNumber(10000000, 99999999);
Response.Write(RandNo);
----------------aspx page code------------------
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Test.aspx.cs" Inherits="Test" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
        <div>
           <asp:Label ID="lblRandom" runat="server"></asp:Label>
        </div>
    </form>
</body>
</html>


------------------aspx.cs page code-------------------
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class Test : System.Web.UI.Page
{
    static Random random = new Random();

    protected void Page_Load(object sender, EventArgs e)
    {
        randomnumber();
    }

    private void randomnumber()
    {
        lblRandom.Text = Convert.ToString(random.Next(10, 300));
    }
}