我在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
答案 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 }
您需要“记住”您在回发中看到的面板,因此您可以将其存储在ViewState
或Session
中。
每次需要新号码时:
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));
}
}
答案 6 :(得分:-1)
创建类似的实例随机类:Random random = new Random(0);
定义随机类的种子