Java Arrays vergleichen?


26.11.2023, 21:00

Hab den Code jetzt mit eurer Hilfe und dem 3. Kriterium "gleiche Reihenfolge"

Meine Frage ist jetzt noch ob das so richtig ist und wie ich das prüfen kann. Wenn ich nämlich bei der print Methode den Namen eingebe kommt ein Fehler

package a4;
public class A4_main {

public static boolean compareArrays(int [] a, int [] b) {

		
if (a.length != b.length) {    //gleiche Länge

			return false;
}
  
for (int i=0; i < a.length; i++) {
  
   if (a[i] != b[i]) {  //gleiche Werte
    
   return false; 
}
    
for (int x=0; x < a.length || x < b.length; x++) {
    
   if (a[0] != b[0]);   // gleiche Reihenfolge, stimmt das so?
  return false;
    
   }
 }
    
    return true;
}
public static void main (String [] args) {

  	System.out.println(compareArrays); // hier kommt der Fehler:   compareArrays cannot be resolved to a variable
  
  }}

3 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Schonmal ein guter Ansatz!

Deine Abfrage, ob die beiden Arrays unterschiedlich lang sind, kann vor die Schleife. Das mehrmals zu überprüfen ist sinnlos, die Anzahl der enthaltenen Elemente ändert sich ja nicht.
Und du hast noch ein paar Syntaxfehler im Code:
- Der Strichpunkt nach dem if muss weg
- Es heißt array.length, nicht array.length[i]. length liefert eine Zahl zurück, da macht das [i] dahinter keinen Sinn.

Dann funktioniert der Code auch:

public static boolean compareArrays(int [] a, int [] b) {
  if (a.length != b.length) { // Unterschiedlich viele Elemente enthalten
    return false;
  }

  for (int i=0; i < a.length; i++) { // Beiden Arrays haben hier garantiert die selbe Länge, also reicht hier die eine Beschränkung
    if (a[i] != b[i]) {
      return false;
    }
  }

  return true;
}
Woher ich das weiß:Hobby – Programmieren ist mein Hobby & Beruf

384749299957933 
Fragesteller
 26.11.2023, 20:49

Ich hab jetzt die Kriterien "gleich", "gleich oft", aber nicht in gleicher Reihenfolge.

Ich kann mir vorstellen, dass ich die Reihenfolge vergleiche, indem ich zeige, dass z.B die 2 im ersten Array im Index 0 steht und im zweiten dann auch.

0
MrAmazing2  27.11.2023, 00:28
@384749299957933

Wie meinst du?

Also bei meinem Code ist auch das Kritierum "gleiche Reihenfolge" mit dabei.

Man vergleicht ja Element [0] in a mit Element [0] in b.
Dann Element [1] in a mit Element [1] in b.
Dann Element [2] in a mit Element [2] in b.
Usw.

Folglich prüft das die richtige Reihenfolge.

0
Von Experte MrAmazing2 bestätigt

Hinweis: Bei solchen Fragen hilft es den Ratgebern immer, wenn etwas genauer ausgeführt wird, was "nicht klappt". Liefert der Compiler Fehlermeldungen oder schlägt die Ausführung der Testbeispiele fehl? Hier wohl beides.

Zwei Anmerkungen zu deinem Lösungsvorschlag:

Erstens:

Es reicht, die Länge der beiden Array ein Mal zu prüfen, bevor irgendwelche Elementvergleiche vorgenommen werden. Arrays unterschiedlicher Länge können nicht gleich im Sinne der Aufgabenstellung sein.

Zweitens:

Sehen wir und deine Methode genauer an:

public static boolean compareArrays(int [] a, int [] b) {
	for (int i=0; i < a.length && i < b.length; i++) {
		if (a[i] != b[i]) && (if a.length[i] != b.length[i]); 
          return false; 
        }
    return true;
  }

Bei der if-Aweisung sind dir einige Fehler unterlaufen:

  1. Der Strichpunkt am Ende des logischen Ausdrucks darf dort nicht stehen.
  2. Der ganze logische Ausdruck muss eingeklammert sein - die Regeln von Java verlangen das so.
  3. Die logische Verknüpfung && ist nicht problemgerecht. Auch bei Feldern gleicher Länge muss die Methode auch dann false zurückgeben, wenn Unlgeichheit zweier Elemente auf gleicher Position festgestellt wird. Die logische Verknüpfung || (oder) wäre problemgerecht. Beachte aber, dass die Längenprüfung sowieso besser vor dem Betreten der Schleife einmalig ausgeführt werden sollte.
Woher ich das weiß:Berufserfahrung – Softwareentwickler

MrAmazing2  26.11.2023, 18:12
Bei solchen Fragen hilft es den Ratgebern immer, wenn etwas genauer ausgeführt wird, was "nicht klappt".

Also in dem Fall erkennt man am Code doch auf dem ersten Blick warum genau bzw. was "nicht klappt", da finde ich deine Anmerkung etwas unnötig.

0

Die anderen Antworten haben dein Problem ja schon gelöst. Ich möchte nur gerne der Vollständigkeit halber noch anmerken, dass du sowas im "echten Leben" normalerweise nicht selbst bauen würdest, weil Java schon eine Methode eingebaut hat, mit der man zwei Arrays vergleichen kann.

public boolean compareArrays(int[] a, int[] b) {
    return Arrays.equals(a, b);
}

Bzw. man würde gar nicht erst eine compareArrays-Funktion bauen, sondern gleich Arrays.equals benutzen.