2 Arrays vergleichen

Joptionpane

Aktives Mitglied
Abend an alle,

bin wieder am üben für die Prüfungen und hänge an einer Aufgabe.
es soll geprüfut werden, ob die zwei Felder feld1 und feld2 die gleiche Größe und den gleichen Inhalt haben (d.h. die gleichen Werte an den gleichen Positionen).
Ich wollts jetzt erstmal soweit haben, das erst überprüfut wird, wo gleiche werte auftauchen(die länge der arrays hab ich mal gleichgroß gesetzt und ist momentan für mich zweitrangig).

Mein Ansatz wäre dieser. Komme mit bool'schen Methoden nicht gut klar..

Java:
public static void main(String[] args) {

		double[] array1 = { 14.0, 16.0, 19.0, 12.0, 16.0, 5.0, 18.0, 9.0, 3.0,
				5.0 };

		double[] array2 = { 12.0, 11.0, 19.0, 2.0, 6.0, 15.0, 3.0, 9.0, 1.0,
				15.0 };

		sindGleich(array1, array2);

		System.out.print(sindGleich);

	}

	public static boolean sindGleich(double[] array1, double[] array2) {

		for (int i = 0; i <= array1.length - 1; i++) {
			for (int j = 0; j <= array2.length - 1; j++) {

				if (array1[i] == array2[j]) {
					return true;

				} 
				
			}
		}
		return false;

	}

}
 
Die Idee ist schonmal jut, allerdings solltest du nicht sofort nach dem ersten Array-Element gleich true zurückgebe, sondern erst, wenn alle durchlaufen sind, also hinter die Doppelschleife. Bis dahin ist der return-Wert erstmal false.

EDIT: Bevor du dir allerdings die Mühe des Durchlaufs machst, solltest du UAF JEDEN FALL die Größen vergleichen, um nicht unnötigerwiese zwei Array zu durchlaufen, die 10000 Elemente beinhalten...

Dafür musst du nur prüfen: arr1.length == arr2.length
 
Wäre dieser Ansatz dann besser?




Java:
public static void main(String[] args) {

		double[] array1 = { 14.0, 16.0, 19.0, 12.0, 16.0, 5.0, 18.0, 9.0, 3.0,
				5.0 };

		double[] array2 = { 12.0, 11.0, 19.0, 2.0, 6.0, 15.0, 3.0, 9.0, 1.0,
				15.0 };

		sindGleich(array1, array2);

		System.out.print(sindGleich);

	}

	public static boolean sindGleich(double[] array1, double[] array2) {

		for (int i = 0; i <= array1.length - 1; i++) {
			for (int j = 0; j <= array2.length - 1; j++) {

				if (array1[i] != array2[j]) {
					return false;
				} 
				
			}
		}
		return true;

	}

}
 
lass es laufen dann siehst du es?!



ist mir klar das es momentan noch nicht laufen wird, habe darum extra bei meinem ersten Post angegeben, dass ich so meine schwächen mit bool'schen Methoden habe.

Da die Methode nur true oder false ausliefert kann es nicht einfach ein S.o.p machen, das weiß ich zumindest, aber wie krieg ich es nun hin, dass es mir die gewünschten Zahlen ausgibt?
 
Du kannst dir nen boolean ganz normal ausgeben lassen:
Java:
System.out.print(sindGleich(array1, array2));

Was für Zahlen willst du ausgeben lassen? Du prüfst doch nur ob zwei Arrays gleich sind.
 
Du rufst zwar sindGleich() auf, aber verwirfst das Ergebnis vollständig. Du müsstest in in einer Variablen speichern oder direkt in die System.out.print() reinschreiben
 
läuft, hatte die Aufgabenstellung falsch verstanden.
Soll nur true oder false ausgegeben werden, wenn array1 4 einträge hat und das andere 5 brauch ich garnicht den Inhalt mehr zu vergleichen und falls doch gleich lang müssen 'alle' Werte identisch sein.

Wäre theoretisch jetzt richtig wenn es so verlangt wäre.

Würde es mit dieser bool'schen Methode aber gehen falls als Frage wäre: Es sollen alle Zahlen ausgegeben werden, die an gleicher Position den gleichen Wert haben(wie in meinem Code die 19.0 an dritter stelle z.b.) ?
 
Die eigentliche Aufgabe müsste damit gelöst worden sein.


Java:
public static void main(String[] args) {

		double[] array1 = { 14.0, 16.0, 19.0, 12.0, 16.0, 5.0, 18.0, 9.0, 3.0,
				5.0 };

		double[] array2 = { 12.0, 11.0, 19.0, 2.0, 6.0, 15.0, 3.0, 9.0, 1.0,
				15.0 };

		sindGleich(array1, array2);

		System.out.print(sindGleich(array1, array2));

	}

	public static boolean sindGleich(double[] array1, double[] array2) {

		if (array1.length != array2.length) {
			return false;
		} else {

			for (int i = 0; i <= array1.length - 1; i++) {
				if (array1[i] != array2[i]) {
					return false;
				}

			}
		}
		return true;
	}
}
 
Java:
  sindGleich(array1, array2);
 
        System.out.print(sindGleich(array1, array2));

Die 1. Zeile kannste weglassen.

Du führst einmal deine Methode aus (1. Zeile), verarbeitest das Ergebnis nicht. Du rufst dann in der 2. Zeile die Methode erneut auf und nimmst dann erst das Ergebnis als Ausgabe.


Uuuund: Deine Methode gibt IMMER false zurück (bei den Werten, die du vorgibst). Nur der letzte Wert ist ausschlag-gebend. Sind alle vorher gleich, nur der letzte anders, ist es false.

Und du kannst es vll ein wenig kürzer gestalten:

Java:
public static boolean sindGleich(double[] array1, double[] array2) {
        boolean gleich = false;
        if(array1.length == array2.length) {
                for(int i = 0; i < array1.length; i++) {
                        if(array1[i] == array2[i]) {
                                gleich = true;
                        } else {
                                gleich = false;
                        }
                }
        }
        return gleich;
}
 
Zuletzt bearbeitet:
Zeile 9 hab ich bereits rausgenommen gehabt, hat mir ein Kommilitone ebenfalls empfhohlen, hat ich übersehen 😀 danke an alle 🙂)

hab jetzt mal alles, müsste soweit stimmen, auch von der Effizienz her(teilweise):

Java:
public static void main(String[] args) {

		double[] array1 = { 14.0, 16.0, 19.0, 12.0, 16.0, 5.0, 18.0, 9.0, 3.0,
				5.0 };

		double[] array2 = { 12.0, 11.0, 19.0, 2.0, 6.0, 15.0, 3.0, 9.0, 1.0,
				15.0 };

		
		System.out.print(sindGleich(array1, array2));

	}

	public static boolean sindGleich(double[] array1, double[] array2) {

		if (array1.length != array2.length) {
			return false;
		} else {

			for (int i = 0; i <= array1.length - 1; i++) {
				if (array1[i] != array2[i]) {
					return false;
					
				}
				break;

			}
		}
		return true;
	}
}
 
Das geht immer noch einfacher. Das else ist unnötig. Ebenso das break. Zusätzlich rechnest du [c]<= length - 1[/c] statt [c]< length[/c].
Diese Dinge wegoptimiert, gehts eigentlich nicht mehr einfacher:
Java:
if (array1.length != array2.length) {
    return false;
}
for (int i = 0; i < array1.length; i++) {
    if (array1[i] != array2[i]) {
        return false;
    }
}
return true;
 

Neue Themen


Zurück
Oben