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

时间:2011-05-27 17:29:55

标签: c# asp.net random numbers

我在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

7 个答案:

答案 0 :(得分:7)

您可以将这些数字放在一个列表中,并根据您的实际数字生成随机数,但不会生成列表中的其余项目。

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;

您不必在int列表中使用nums值;它可以是你的Question对象,或者你需要的任何东西;你会得到的是随机顺序的物品。

答案 1 :(得分:3)

您需要一个面板/指数列表,然后使用例如Fisher-Yates对其进行随机播放。

答案 2 :(得分:1)

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

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

您需要“记住”您在回发中看到的面板,因此您可以将其存储在ViewStateSession中。

每次需要新号码时:

Random random = new Random();
var idx = random.next(0, panels.Count);
var selectedPanel = panels[idx];
panels.Remove(selectedPanel);

panels.Count() == 0时,请将其与所有数字重新区分开来。

答案 3 :(得分:0)

您可以“标记”已经显示的面板,如果已选择的随机数已经标记,请转到下一个面板(i ++),直到找到未标记的面板。

答案 4 :(得分:0)

在C#Page,

中编写以下类
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);

答案 5 :(得分:0)

----------------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));
    }
}

enter image description here

答案 6 :(得分:-1)

创建类似的实例随机类:Random random = new Random(0); 定义随机类的种子