| 

.NET C# Java Javascript Exception

3
Ich muß es nochmals versuchen!
Ich komme nicht weiter.

Was muß in die Klammern nach "random.Next", um aus den vorgegebenen Zahlen Zufallszahlen zu generieren?

Wenn ich "variable = random.Next(100, 200)" schreibe bekomme ich "z" Zufalszahlen zwischen 100 und 199. Ist ja auch i.O..

Aber ich möchte aus einer vorgegebenen Zahlenreihe Zufallszahlen!

Siehe bitte auch den kompl.code.

variable = random.Next( );
// zwischen ( ) muss was, um eine Zufallszahl
// aus "myArray-Zahlen" zu erhalten?



using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace PersZahlReiheVari01
{
public partial class Form1 : Form
{
// Festlegung der Zahlen, die bei Programmstart in die Listbox geladen werden

List<Int32> myArray = new List<Int32>() {
111,26,357,144,53,62,912,88,91,411,792,425,888 };

public Form1()
{
InitializeComponent();
}

private void cmdLaden_Click(object sender, EventArgs e)
{

// die im Programm eingegebenen Zahlen werden in die Listbox geladen

foreach (Int32 value in myArray)
{

lstPerszahlreihe.Items.Add(value);

}
}

// ************************************************************************
// "z" Zufallszahlen auswählen und anzeigen
// ************************************************************************

private void cmdAuswahl_Click_1(object sender, EventArgs e)
{

// Anzahl der Zufallszahlen

int z = (int)numAnzahl.Value;

// Dopplung prüfen, funktioniert noch nicht!
{
Random random = new Random();
int[] myArray = new int[99];

int variable = 0;
int indexer = 0;

while (indexer < z)
{

variable = random.Next( );
// zwischen ( ) muss was, um "z" Zufallszahlen
// aus "myArray-Zahlen" zu erhalten?

if (myArray.Count(p => p == variable) == 0)
{

myArray[indexer] = variable;
indexer++;
}

// Ausgabefelder leeren

lblAnzeige1.Text = "";

for (variable = 0; variable < z; variable++)
{

// unformartierte Ausgabe der ausgewählten ZufallsZahlen

lblAnzeige1.Text += (myArray[variable]) + "\n";

}
}

}
}
private void cmdEnde_Click(object sender, EventArgs e)
{
Close();
}

}
}
News:
05.02.2014
kannnix 61 6
2 Antworten
1
Wenn Du aus der Zahlenreihe (myArray) eine zufällige Zahl auslesen möchtest, könnte das so aussehen.

// Pseudocode
var index = random.Next(0, myArray.Count());
var zahl = myArray[index];


Wenn du mehrere Zahlen haben möchtest, kannst du die Werte in einer Schleife auslesen.
05.02.2014
lbm1305 849 1 8
lbm1305 849 1 8
Vielen Dank an ibm1305. Zusammen mit der Antwort von Jens Duczmal komme ich weiter.
kannnix 06.02.2014
1
Salü,

ergänzend zu dem Code von ibm1305 möchte ich Dir gerne mal erklären, was dort passiert, bzw. weshalb ibm das so vorschlägt. Denn einfach nur blind den Code zu übertragen wird Dir - angesichts der recht verzweifelten und wiederholten fragen - nichts helfen.

Du weisst bereits, dass du mit
random.Next(100, 200);
eine Zufallszahl zwischen 100 und 199 bekommst.

Du möchtest nun wissen, wie Du aus einer Liste mit festen Zahlen zufällig Zahlen bekommen kannst.

Nun, Deine Liste sieht ja wie folgt aus
List<Int32> myArray = new List<Int32>() { 
111,26,357,144,53,62,912,88,91,411,792,425,888 };


In Deiner Liste sind 13 Zahlen. Welche das sind ist an der Stelle egal, denn Du möchtest ja, das aus DIESER Liste mit 13 Zahlen immer ein zufälliger Eintrag zwischen Eintrag 1 und Eintrag 13 ausgewählt wird.

Also, ändern wir den Code doch mal so ab:
//Eine zufällige Zahl zwischen 0 und 12 holen.
//Dies entspricht den 13 Einträgen in Deiner Liste.
var eintragNr = random.Next(0, 13);

//Mit dieser Eintrags-Nummer denn die in der Liste gespeicherte Zahl für Eintrag X holen
var deineZufallszahl = myArray[eintragNr];


Hoffe, das ist jetzt etwas klarer geworden.

PS: Übrigens ist der erste Eintrag eine Liste in den meisten Programmiersprachen der "Nullte", weshalb wir hier mit Nummern von 0 bis 12 arbeiten, und nicht mit 1-13.

PPS: Falls Du das in einer Schleife machen möchtest, um z.B. 6 Zufallszahlen aus der Liste zu holen.....

for (int i = 1; i <= 6; i++) {
var eintragNr = random.Next(0, 13);
var deineZufallszahl = myArray[eintragNr];
Console.WriteLine("Zufallszahl Nr. {0} lautet {1}",i, deineZufallszahl);
}

Ich denke wenn Du den oberen Teil verstanden hast, erklärt sich diese Schleife von selbst.
05.02.2014
Jens Duczmal 2,6k 1 3 9
Jens Duczmal 2,6k 1 3 9
Vielen Dank. Diese sehr ausführliche Antwort hat das Problem gelöst.
Nun muß ich weitersehen: Dopplung prüfen, formatieren,
und mit einem offenen "myArray" arbeiten.
Zukünftig soll die Zahlenreihe über textBox - Eingaben erweitert werden.
kannnix 06.02.2014
1
Hier gäbe es zwei Möglichkeiten. Entweder du merkst die den Index oder den Wert, den der Index in myArray markiert. Beim Auslesen muss dann überprüft werden, ob dieser bereits verwendet wurde.
lbm1305 06.02.2014
1
Achja...es ist kein i(bm1305) sondern ein kleines L(bm1305) ;-)
lbm1305 06.02.2014
1
Sorry für den Schreib-/Lesefehler.
Für das merken der bereits verwendeten Zahlen oder der EintragsNr (würde die nehmen, spart zeit) würde ich vermutlich ein Dictionary nehmen. Vorteil hier wäre, dass schnell und einfach auf bereits vorhandene Einträge prüfen kann.
Jens Duczmal 06.02.2014
1
Als alternative eine Kopie der Liste erzeugen und die verwendeten Zahlen aus der Liste entfernen.
Roland Bär 06.02.2014
1
Gefällt mir irgendwie noch besser. Die einfachsten Ideen sind doch immer die besten :)
Jens Duczmal 06.02.2014
Sorry an lbm1305, auch ich habe aus l -> i gemacht.Ja, ja, die "großen" ITler.
Nochmals Dank an Alle, bis dahin!
kannnix 08.02.2014

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH