Ich habe mich jetzt nochmal hingesetzt und versucht, das Problem zu lösen. Hab mit dem von dir beschriebenen Ansatz angefangen und konnte die Aufgabe jetzt in einem ziemlich simplen und überschaubaren Code lösen:Man kann natürlich auch einfach streichen.
Beispiel:
- Sind die Arrays A und B gleich lang? Falls nicht, gib false zurück.
- Für jedes Element aus A: suche ein Element mit dem gleichen Wert in B. Falls gefunden: streiche, das Element, ansonsten gib false zurück.
- Gib true zurück.
A={1,2,3,4,5,1}, B={5,1,3,2,1,4}
Arrays sind gleich lang, also weiter.
1. Element aus A = 1 -> streiche das erste Vorkommen von 1 aus B -> B = {5,-,3,2,1,4}
2. Element aus A = 2 -> streiche das erste Vorkommen von 2 aus B -> B = {5,-,3,-,1,4}
3. Element aus A = 3 -> streiche das erste Vorkommen von 3 aus B -> B = {5,-,-,-,1,4}
4. Element aus A = 4 -> streiche das erste Vorkommen von 4 aus B -> B = {5,-,-,-,1,-}
5. Element aus A = 5 -> streiche das erste Vorkommen von 5 aus B -> B = {-,-,-,-,1,-}
6. Element aus A = 1 -> streiche das erste Vorkommen von 1 aus B -> B = {-,-,-,-,-,-}
Da jedes Element aus A in B gestrichen werden konnte -> true
Wäre z. B. B = {5,1,3,2,6,4} gewesen, dann hätte im 6. Schritt die zweite 1 aus A nicht in B gestrichen werden können -> false.
Java:
public class A5_main {
public static boolean compareArraysVal(int [] a, int [] b) {
Arrays.sort(a);
Arrays.sort(b);
if (a.length == b.length && Arrays.equals(a,b)) {
return true;
}
return false;
}
public static void main (String [] args) {
int[] a = {5,4,3,2,1};
int[] b = {1,2,3,4,5};
System.out.println(compareArraysVal(a, b));
System.out.println(compareArraysVal(a, a));
}}
Wenn ich diesen Code ausführe, bekomme ich zweimal true, also Reihenfolge egal, nur gleiche Länge und gleiche Werte werden geprüft.
Natürlich habe ich hier eine Abkürzung genommen, aber ich habe auch versucht, die Aufgabe ohne die Abkürzung zu lösen.
Java:
public class A5_main
public static boolean compareArraysVal(int [] a, int [] b) {
Arrays.sort(a);
Arrays.sort(b);
if (a.length == b.length) { //Prüfung auf gleiche Länge
return true;
}
return false;
}
int [] c = new int [a.length -1]; // zweites Arrays von a -1, um die Werte streichen zu können
int [] d = new int [b.length -1]; //zweites Array für b -1, um die Werte streichen zu können
int removeIndex = 0; // Index, der gestrichen werden soll
for (int i =0; i < removeIndex; i++) {
for(removeIndex = 0; removeIndex < a.length && removeIndex < b.length; removeIndex++); // ist der Index kleiner als die Länge a, dann Index erhöhen. Index soll hier erhöht werden, da das Programm ja sonst nicht starten würde (mit 0)
}
c[i] = a[i]; // Index des neuen arrays -1 = dem Index von a
d[i] = b[i];
}
for (int i = removeIndex +1; i < a.length && i < b.length; i++) {
c[i-1] = a[i]; // hier soll der Index von a entfernt und an c zugewiesen werden
d[i-1] = b[i];
}
}
public static void main (String [] args) {
int[] a = {5,4,3,2,1};
int[] b = {1,2,3,4,5};
System.out.println(compareArraysVal(a, b));
System.out.println(compareArraysVal(a, a));
}}
Ich kann das Programm jetzt nicht prüfen, weil sich einige Fehler eingeschlichen haben z.B. in Z.17&18: "a cannot be resolved into a variable", aber das liegt wahrscheinlich an einer fehlerhaften Zeichensetzung.
Mich würde jetzt nur interessieren, ob die Idee richtig war, ich habe ja bereits einen funktionierenden Code.