Grober Fehler. Ein Bild sagt mehr als tausend Worte.Ich habe eine klare Vorstellung zum Problem, ich habe mir zwar keine Skizze gemacht, habe es nicht für unbedingt nötig empfunden.
Wie gesagt: das wäre die Alternative, die im konkreten Fall funktionieren würde. Was aber, wenn der Tausch der Elemente einer Bedingung unterliegt, z. B. Elemente nur dann getauscht werden sollen, wenn das Element im Array a größer als das Element im Array b ist? Dann funktioniert from-to+1 nicht mehr.Ich hätte es total logisch gefunden einfach return to-from zurückzugeben direkt nach der Rekursivmethode , nach dem Motto jedes Mal, wenn diese aufgerufen wurde, gibt er die Anzahl der Vertauschungen zurück.
Ja, das wäre die Lösung (ich erwähne mal vorsichtshalber dazu, dass die Punkte durch sinnvolle Parameter ersetzt werden müssenAlso so?Java:return swapArray(......) + 1;
Was aber, wenn der Tausch der Elemente einer Bedingung unterliegt, z. B. Elemente nur dann getauscht werden sollen, wenn das Element im Array a größer als das Element im Array b ist? Dann funktioniert from-to+1 nicht mehr.
return swapArray(from + 1, to, a, b) + 1;
Anforderungen ändern sich schneller als Du tippen kannst. Es wäre ein leichtes, die Bedingung in die Aufgabenstellung einzufügen - z. B in einer Folgeaufgabe...sind meiner Auffassung doch dann gar nicht relevant bei dieser Aufgabenstellung, weshalb ich es als sinnvoll erachtet hätte.
Meinst Du die ArrayIndexOutOfBoundsException? Wenn Du alles verstanden hast, solltest Du das Problem in einer Minute selbst beheben können.Dann so, aber trotzdem noch Fehlermeldung.
if(to >= a.length || to >= b.length) return 0;
Zu viel Kaffee macht dumm, hab ich festgestellt...Gut, dass ich den Kaffee gerade noch runterschlucken konnte.
public class Functionality {
public static int swapArray(int from, int to, int[] a, int[] b) {
if (a == null || b == null)
return 0;
if (from < 0 || from > to || a.length < from || b.length < from)
return 0;
if (to >= a.length || to >= b.length)
return 0;
int tmp = b[from];
b[from] = a[from];
a[from] = tmp;
return swapArray(from + 1, to, a, b) + 1;
}
}
Das entspricht nicht dem gegebenen "Spezialfall"Java:if (to >= a.length || to >= b.length) return 0;
Das funktioniert doch schon nicht mehr, wo from=0 und to=0, weil dann das richtige Ergebnis 0 ist, aber 1 ausgegeben werden würdeGrober Fehler. Ein Bild sagt mehr als tausend Worte.
Wie gesagt: das wäre die Alternative, die im konkreten Fall funktionieren würde. Was aber, wenn der Tausch der Elemente einer Bedingung unterliegt, z. B. Elemente nur dann getauscht werden sollen, wenn das Element im Array a größer als das Element im Array b ist? Dann funktioniert from-to+1 nicht mehr.
Das funktioniert doch schon nicht mehr, wo from=0 und to=0, weil dann das richtige Ergebnis 0 ist, aber 1 ausgegeben werden würde
ok hast rechtWenn ich die Aufgabe richtig im Kopf habe, wäre das richtige Ergebnis 1, weil from und to inkl. sein sollen.
"Wenn "to" größer als die Länge-1 des kleinsten Arrays ist, so wird die Länge-1 des kleinsten Arrays für "to" verwendet. "
to = Math.min(to, Math.min(a.length, b.length)-1);