Feedback

C# - Array mit Zufallszahlen

Veröffentlicht von am 04.11.2015
(0 Bewertungen)
Füllen eines Arrays mit zufälligen Zahlen.
GFU-Schulungen  [Anzeige]

C# Komplett

Sie kennen sich in objektorientierter Programmierung aus. Sie schreiben C++ oder Java? Und nun stehen Sie vor der Aufgabe, in C# Anwendungen zu erstellen. Das C# Komplett-Seminar verschafft Ihnen umfassende Programmierkenntnisse in dieser Sprache. Nach der Schulung entwickeln Sie selbständig Anwendungen mit C#. Sie kennen die Datentypen und Klassenbibliotheken der objektorientierten Programmiersprache C#. Der Komplettkurs setzt bei den Grundlagen von C# ein. Sie arbeiten mit Variablen und konvertieren Typen. Multithreading, Delegates, Generics sind nach dem Seminar für Sie kein Geheimnis mehr.

C# Grundlagen

Die Schulung vermittelt Ihnen die Grundlagen von C# in der Arbeit mit Datentypen sowie bei Klassenbibliotheken. Sie lernen, mit Variablen umzugehen und deren verschiedene Formen zu konvertieren. 

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 04.11.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 04.11.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 04.11.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 05.11.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 05.11.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 05.11.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!