Inhalt von zwei Arrays vergleichen


lifeson

Grünschnabel
#1
Hallo!

Ich versuche mich gerade an dieser Aufgabe, aber habe etwas Probleme dabei.
Java:
 public static void main(String[] args) {
            int[] feld1 = {6,9,6,4,3,2,1};
            int[] feld2 = {6,4,2};
            System.out.println(feldEnthalten(feld1, feld2));
        }
        public static boolean feldEnthalten(int[] feld1, int[] feld2) {
            if (feld1.length != feld2.length) {
                return false;
            } else {
                for (int i = 0; i <= feld1.length - 1; i++) {
                    if (feld1[i] != feld2[i]) {
                        return false;
}}}
            return true;
}}
Bisher vergleiche ich ja nur die selben Stellen in den beiden Arrays. Also wenn ich im feld1 auch die Zahlen 6,4,2 wären, käme true heraus. Ich möchte aber das bei unterschiedlich großen Arrays die Zahlen verglichen werden. Bei dem Beispiel oben möchte ich also auch true herausbekommen, da die Zahlen im feld2 auch in feld 1 vorkommen, eben nur in einer anderen Reihenfolge. Da ich keine Methoden/Klassen von vordefinierten Java Klassen benutzen darf, erschwert dass das Ganze auch (abgesehen von length) :/
Ich komme nur leider überhaupt nicht dahinter, wie ich das bewerkstelligen soll. Ich wäre für Hilfe und Tipps sehr dankbar!
 

Technipion

Erfahrenes Mitglied
#2
Da ich keine Methoden/Klassen von vordefinierten Java Klassen benutzen darf, erschwert dass das Ganze auch (abgesehen von length) :/
Das ist natürlich sehr ärgerlich, denn sonst wäre das Dank Sets relativ leicht und schnell erledigt.

Ich würde das ganze wahrscheinlich so angehen (in Pseudocode damit du noch etwas Java üben kannst ;)):
Code:
FUNKTION LIEGT_A_IN_B(ARRAY A, ARRAY B):
 
  IndexA = 0 // Starte mit dem ersten Element in A
  IndexB = 0 // Starte mit dem ersten Element in B
 
  ENDLOSSCHLEIFE:
    
    // Abbruchbedingungen:
    WENN IndexA == A.Länge:
      RETURN WAHR // wir haben das Ende von A erreicht -> alle a liegen in B
    WENN IndexB == B.Länge:
      RETURN FALSCH // wir haben das Ende von B erreicht -> mind. ein a liegt nicht in B
    
    a = A[IndexA] // aktuelles Element in A
    b = B[IndexB] // aktuelles Element in B
    WENN a == b: // dieses a stimmt mit einem Element in B überein
      IndexA += 1 // springe zum nächsten Element in A
      IndexB = 0  // und starte von vorne in B
    SONST:
      IndexB += 1 // teste nächstes Element in B
Achtung: Der Algo ist ungetestet. Müsste aber funktionieren :cool:

Ist mit Sicherheit nicht der performanteste aber war schnell und einfach in der Überlegung.

Gruß Technipion