Feedback

C# - Array mit Zufallszahlen

Veröffentlicht von am 11/4/2015
(0 Bewertungen)
Füllen eines Arrays mit zufälligen Zahlen.
public int[] GetRandomIntArray(int arraySize, int minNumber, int maxNumber)
{
    Random randomizer = new Random();
    var intArray = new int[arraySize];

    for (int i = 0; i < arraySize; i++)
    {
        intArray[i] = randomizer.Next(minNumber, maxNumber + 1);
    }

    return intArray;
}
Abgelegt unter ArraymitZufallszahlen.

6 Kommentare zum Snippet

3r0rXx schrieb am 11/4/2015:
Hallo,
schöner wäre es, wenn du uns eine generische Klasse zeigen würdest, die ein Array T[] mit "Zufalls"zahlen vom Typ T(float, double, short, long, byte, int) zurückgibt.

Gruß
Koopakiller schrieb am 11/4/2015:
@3r0rXx Richtig Generisch geht das leider nicht, da die Zahl-Typen keine gemeinsame Schnittstelle o.ä. haben. Auch unterstützt Random nur Int32, Double und Byte-Arrays.
Die einzige Mögliche Lösung besteht darin mehrere Methoden zu schreiben.
Merlino schrieb am 11/4/2015:
@3r0rXx Vielleicht geht Folgendes eher in die Richtung? Danke für die Idee und die Beiträge.


class RandomArrayClassGeneric<T>
{
public T[] GetRandomNumberArray(int arraySize, int minNumber, int maxNumber) //BAUSTELLE
{
Random randomizer = new Random();
var numberArraay = new T[arraySize];

for (int i = 0; i < arraySize; i++)
{
numberArraay[i] = (T)Convert.ChangeType(randomizer.Next(minNumber, maxNumber + 1), typeof(T));
}

return numberArraay;
}
}


Koopakiller schrieb am 11/5/2015:
@Merlino
Wie ich schon schrieb, richtig generisch geht es nicht. Dein neuer Code kann zwar am Ende ein Array mit Doubles ausgeben, befüllt ist es aber nur mit Int32's.
Das Große Problem an den existierenden halb-generischen Lösungen ist, dass man wieder alles übergeben kann - auch überhaupt nicht passende Typen wie Button oder Page. Damit hat man nur den Vorteil das man eben nur eine Methode statt 2 bis maximal 11 hat (Wobei mehr möglich wären). Aber einen meiner Meinung nach überwiegenden Nachteil der fehlenden Compilerprüfung.

Ich plädiere schon lange für Schnittstellen um die Basis-Typen zu vereinen, bisher aber leider ohne Erfolg.
keugen schrieb am 11/5/2015:
Bei deiner Variante hast du eine Menge von doppelten Zahlen drine. Du musst immer wieser prüfen, ob die Zahl schon vorhanden ist:


private static int[] GetRandomArray(int count)
{
var numbers = new int[count];
var random = new Random();

for (var i = 0; i < numbers.Length; i++)
{
bool drin;
int n;
do
{
n = random.Next(1, count+1);
drin = false;
for (var j = 0; j < numbers.Length; j++)
{
if (numbers[j] != n) continue;
drin = true;
break;
}
}
while (drin);
numbers[i] = n;
}
return numbers;
}
Koopakiller schrieb am 11/5/2015:
@keugen Zufall heißt nicht gleiche Verteilung. Stichwort: Cluster
Das ist zwar mit Computern eigentlich nicht richtig realisierbar, aber Merlinos Code ist noch mit das beste was möglich ist.
 

Logge dich ein, um hier zu kommentieren!