Nicht sich wiederholende Zufallszahlen in asp.net C#
Habe ich 6 Frage 6 asp.net panel server control ,
Ich muss es allen zeigen-panel nacheinander in zufälliger Reihenfolge( eine Frage, ist sichtbar und andere unsichtbar jedes mal ).
Ich weiß nicht, so schließen Sie die Anzahl von erneut generieren .
Ich Schreibe wie diese :
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
- Alles was ich will ist, zu zeigen, jede Frage einmal, und ich brauche, um zu zeigen, Sie alle nacheinander in zufälliger Weise .
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie die Nummern in einer Liste, und das generieren der Zufallszahl nicht auf Ihre echten zahlen, sondern auf die verbleibenden Elemente in der Liste.
Müssen Sie nicht verwenden
int
Werte in Ihremnums
Liste, es kann IhreQuestion
Objekte, oder was auch immer Sie brauchen; Was Sie bekommen, ist die Elemente in einer zufälligen Reihenfolge.Müssen Sie eine Liste von Platten/Indizes und dann mische Sie mit zum Beispiel Fisher-Yates .
Beginnen Sie mit einer Liste aller Ihrer panel-Nummern:
Müssen Sie zu "erinnern", welche panels Sie bereits gesehen haben, über postbacks, so können Sie speichern Sie diese in
ViewState
oderSession
vielleicht.Jedes mal, wenn Sie benötigen eine neue Nummer:
Wenn
panels.Count() == 0
, re-inistialise es mit allen zahlen.Können Sie die "mark" - panels, haben Sie bereits gezeigt, wie gesehen, und wenn die Zufallszahl ausgewählt ist bereits markiert, gehen Sie zum nächsten panel (i++), bis Sie eine finden, die nicht gekennzeichnet sind.
Schreiben Sie folgende Klassen in der C# - Seite,
Rufen dann die folgende Methode, wo immer Sie Sie benötigen,
erstellen Sie eine Instanz der random-Klasse ähnlich dieser:
Random random = new Random(0);
definieren seed für die random-Klasse