C# C# - Arrays vergleichen

Captium

Cadet 4th Year
Registriert
Apr. 2017
Beiträge
81
Hi Leute,

bin ein blutiger Anfäger in C# und ich will 2 Arrays vergleichen. Der Code sieht bis jetzt so aus:
Code:
 static void Main(string[] args)
        {

            int[] array1 = new int[] { 1, 2, 3, -4, 95 };
            int[] array2 = new int[] { 45, 6, 13, 2, 4 };
       

            bool hasSameNumberSuccess = hasSame(array1, array2);
            if (hasSameNumberSuccess)
            {
                Console.WriteLine("Success");
            }
            else
            {
                Console.WriteLine("Failure");
            }
            Console.ReadKey();
        }
        public static bool hasSame(int[] array1, int[] array2)
        {
            for (int i = 0; i < array1.Length; i++)
            {
                for (int j = 0; j < array2.Length; i++)
                {
                    if (array1[i] == array2[j])
                    {
                        return true;
                    }
                }               
            }
            return false;
        }
    }
}
Es sollte gucken ob eine Zahl aus dem array1 mit einer Zahl aus array2 identisch ist und wenn ja dann Success ausgeben.
(Es kommt nicht auf die Position an.)
Kriege es aber nicht hin irgendwie. was machen ich Falsch bzw. wie geht es richtig?

Hoffe jemand kann mir helfen.

Vielen dank für eure Mühen.


Mit freundlichen Grüßen
 

Anhänge

  • arraysvergleichen.PNG
    arraysvergleichen.PNG
    25,2 KB · Aufrufe: 1.397
In die zweite Schleife muss j++, statt i++
 
Zuletzt bearbeitet:
Ansonsten kannst du auch
Code:
if (array2.Contains(array1[i])){
     return true;
}
verwenden.

Code:
public static bool hasSame(int[] array1, int[] array2)
        {
            for (int i = 0; i < array1.Length; i++)
            {
                    if (array2.Contains(array1[i]))
                    {
                        return true;
                    }
            }
            return false;
        }
 
Zuletzt bearbeitet:
@Overkee:
Deine for-Schleife würde direkt bei i=1 ein true oder false returnen; und damit die Schleife abbrechen.

Sinniger wäre es, falls das Element aus Array1 NICHT in Array2 drin ist, ein false zu returnen.
Und dann, NACH der for-Schleife, d.h. sobald die Schleife das komplette Array durch hat, ein true zu returnen.

Edit:
Sollen die Arrays gleiche Längen haben?
Was passiert mit doppelten Elementen?

Edit2;
Okay, natürlich zur Aufgabenstellung alles okay.
Es soll ja nur geguckt werden ob eine Zahl gleich ist. Mein Fehler
 
Zuletzt bearbeitet:
Hallo,
anstatt dich mit Schleifen zu plagen, kanns du auch ganz einfach die Methoden des IEnumerable<T> interfaces verwenden. Dieses Interface beitet Methoden mit denen du Arrays mit einem Methodenaufruf vergleichen kannst.

Wobei sauberes vergleichen gar nicht so trivial ist. Es hängt davon WAS du vergleichen möchtest. Du solltest dich zuerst einmal über Referenz- und Inhaltliche Gleichheit auseinandersetzen. Sprich: Ist es das gleiche Objekt (Referenzvergleich, sprich gleiche Speicheradresse) oder ist das Objekt inhaltlich gleich (anderes Objekt (andere Speicheradresse) mit gleichem Inhalt)?

Weiter sind Kentnisse der Vergleichsinterface IEquatable<T>, IComparable<T>, etc. notwending. Viele Datentypen und deren Methoden in C# bzw. net bauen auf diese Vergleichsinterfaces auf und funktionieren nur mit diesen. Die implementierung für die "eingebauten" Datentypen hat aber bereits Microsoft für dich übernommen :-)

Viel Glück!

greetz
hroessler
 
Bonanca schrieb:
@Overkee:
Deine for-Schleife würde direkt bei i=1 ein true oder false returnen; und damit die Schleife abbrechen.

Habe es ausprobiert, bevor ich es gepostet habe. Funktioniert tadellos.

Wenn es mindestens eine gleiche Zahl in beiden Arrays gibt wird ein Success ausgegeben. Wenn nicht dann Failure. Genau wie in der Aufgabe gefordert.
 
Zurück
Oben