Rekursive swapArray Methode

Ehrlich gesagt musst du nur die Teilprobleme in mihe7's post #2 lösen. Dann sollte alles klar sein.

Ohne die Grenzfälle ist das ein Vierzeiler.
 
Ich habe eine klare Vorstellung zum Problem, ich habe mir zwar keine Skizze gemacht, habe es nicht für unbedingt nötig empfunden.
Grober Fehler. Ein Bild sagt mehr als tausend Worte.

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.
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.
 
Den Sinn verstehe ich jetzt, nur solche Fälle wie:
Java:
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.
sind meiner Auffassung doch dann gar nicht relevant bei dieser Aufgabenstellung, weshalb ich es als sinnvoll erachtet hätte.
2.
Java:
return swapArray(from + 1, to, a, b) + 1;
Dann so, aber trotzdem noch Fehlermeldung.
 
sind meiner Auffassung doch dann gar nicht relevant bei dieser Aufgabenstellung, weshalb ich es als sinnvoll erachtet hätte.
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...

Dann so, aber trotzdem noch Fehlermeldung.
Meinst Du die ArrayIndexOutOfBoundsException? Wenn Du alles verstanden hast, solltest Du das Problem in einer Minute selbst beheben können.
 
Java:
if(to >= a.length || to >= b.length) return 0;
Könnte das ein richtiger Ansatz sein? Denn die ArrayIndexOutOfBoundsException tritt auf, wenn versucht wird ein Array mit einem ungültigen Index anzusprechen, woraus ich schlussfolgern kann, dass die to-Indexzahl nicht der Arraylänge entsprechen darf bzw. größer sein darf. Zwar klappt es so nicht, aber müsste doch vom Gedanke her korrekt sein ?
 
Java:
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;
 }
}
 
Java:
  if (to >= a.length || to >= b.length)
   return 0;
Das entspricht nicht dem gegebenen "Spezialfall"
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.

Und falls du diesen meintest
Wenn "from" negativ, größer als "to" oder größer als die Länge eines Arrays ist, so wird 0 zurückgegeben.

Dieser bezieht sich auf from nicht auf to.
 
Grober 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
 
Zuletzt bearbeitet:
Hey Jono,

könntest du mir vllt. sagen, wie du den Spezialfall

"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. "

gelöst hast?
 

Neue Themen


Zurück
Oben