Codefieber.de

IT-Blog

Array auf doppelte Einträge überprüfen – Rekursion

| Keine Kommentare

Array auf doppelte Einträge überprüfen – Rekursion (Rekursive Methode)

Wenn man Zufallszahlen generieren und in ein Array schreiben möchte, aber dabei prüfen möchte, dass keine doppelten Einträge entstehen, der kann dies in Form einer Rekursion (Rekursive Methode) realisieren.

Im nachfolgenden Code, wird zunächst ein Array von der Größe 10 initialisiert. Danach soll die for-Schleife 10x durchlaufen werden, wobei die Prozedur “FillNextItem(myArray, i)”, mit dem Array und dem Arrayindex als Parameter jeweils aufgerufen wird.

Wurde die “FillNextItem()”-Prozedur aufgerufen, wird eine Zufallszahl zwischen 1 und 11 (also 10 Zufallszahlen) erzeugt und mit der Funktion “FindContains(int[] myArray, int rndCound)” geprüft, ob der Arraywert mit der Zufallszahl übereinstimmt. Um durch das Array schrittweise durchlaufen zu können, nutzen wir hier die foreach-Schleife.

Ist nun der Wert im Array mit dem der Zufallszahl gleich, wird ein True zurück gegeben und die Funktion wird erneut aufgerufen (Rekursion). Ist die Zufallszahl mit dem Wert im Array nicht gleich, wird ein false zurück gegeben und die Zufallszahl in den entsprechende Arrayindex geschrieben.

Das Ganze passiert so lange, bis die for-Schleife 10x durchlaufen- und das Array ohne doppelte Einträge gefüllt wurde.

Der entsprechende Code sieht wie folgt aus:

class Program
    {
        static Random rnd = new Random();

        static void Main(string[] args)
        {             
            int[] myArray = new int[10];
            int rndCount = 0;            

            for (int i = 0; i < myArray.Length; i++)
            {
                FillNextItem(myArray, i);
                Console.WriteLine(myArray[i]);
            }
            Console.ReadLine();            
        }


        private static bool FindContains(int[] myArray, int rndCound)
        {
            foreach (int item in myArray)
            {
                if (item == rndCound)
                {
                    return true;
                }
            }
            return false; 
        }


        private static void FillNextItem(int[] myArray, int i)
        {            
            int rndCount = 0;
            rndCount = rnd.Next(1, 11);

            if (FindContains(myArray, rndCount))
            {
                FillNextItem(myArray, i);
            }
            else
            {
                myArray[i] = rndCount;
            }
        }

    }
avatar

Autor: Pascal

Codefieber.de wird von Pascal Betke geführt, administriert und gestaltet. Alle Inhalte sind persönlich von mir ausgewählt und erstellt, nach bestem Gewissen und Können, was die Möglichkeit von Fehlern nicht ausschließt.

Schreibe einen Kommentar

Pflichtfelder sind mit * markiert.