Неповторяющееся случайное число в asp.net C # - PullRequest
2 голосов
/ 27 мая 2011

У меня 6 вопросов в 6 панели управления сервером asp.net, мне нужно показать все панели один за другим в случайном порядке (один вопрос виден, а другой невидим каждый раз).

Я не знаюне знаю, как исключить число из генерации снова.Я пишу так:

    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 ]

7 голосов
/ 27 мая 2011

Вы можете поместить числа в список и сгенерировать случайное число не на основе ваших реальных чисел, а на основе оставшихся элементов в списке.

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 объекты или все, что вам нужно; То, что вы получите, это предметы в случайном порядке.

3 голосов
/ 27 мая 2011

Вам нужен список панелей / индексов, а затем перетасуйте их, например, Фишер-Йейтс .

1 голос
/ 27 мая 2011

Начните со списка всех номеров вашей панели:

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

Вам нужно будет «запомнить», какие панели вы уже видели в постбэках, чтобы вы могли сохранить их в ViewState или Session, может быть.

Каждый раз, когда вам нужен новый номер:

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

Когда panels.Count() == 0, заново инициализируйте его со всеми числами.

0 голосов
/ 10 мая 2019
----------------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

0 голосов
/ 06 марта 2013

Запишите следующие классы на своей странице 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);
0 голосов
/ 23 октября 2011

создать случайный класс, подобный этому: Random random = new Random(0); определить семена для случайного класса

0 голосов
/ 27 мая 2011

Вы можете «пометить» панели, которые вы уже показали, как видимые, и, если выбранное случайное число уже помечено, перейти к следующей панели (i ++), пока не найдете ту, которая не была помечена.

...