Rekursive swapArray Methode

J

jono

Top Contributor
Hallo zusammen,
die Aufgabe lautet:
Java:
Gegeben ist die Signatur der Methode swapArray in Functionality.java.

Implementieren Sie eine REKURSIVE Methode, die zwei Index-Werte und zwei Integer-Arrays erhält.
Die Methode soll von dem Index "from" (inklusive) bis zum Index "to" (inklusive) die Werte an den gleichen Indexstellen aus den beiden Arrays tauschen. Der Rückgabewert ist die tatsächliche Anzahl der Vertauschungen.
Bsp.:
Mit den Arrays
  a = new int[]{5, 1, 2, 8, 6, 9}
  b = new int[]{42, 34, 68, 21, 12, 47, 82}
liefert der Aufruf swapArray(1, 4, a, b); den Wert 4, da es vier Vertauschungen gibt.
Nach dem Aufruf sehen die Arrays wie folgt aus:
a = [5, 34, 68, 21, 12, 9]
b = [42, 1, 2, 8, 6, 47, 82]

Folgende Spezialfälle sind zu beachten:
- Wenn einer der Arrays null ist, so wird 0 zurückgegeben
- Wenn "from" negativ, größer als "to" oder größer als die Länge eines Arrays ist, so wird 0 zurückgegeben.
- 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.
- "from" und "to" sind inklusive, d.h. die Werte an den Indexstellen "from" und "to" müssen ebenfalls getauscht werden.
Dazu habe ich folgenden Quellcode:
Java:
public class Functionality {
 public static int swapArray(int i, int j, int[] a, int[] b) {
  if (a == null || b == null) {
   return 0;
  }
  if (i < 0 && i > j || i > a.length || i > b.length) {
   return 0;
  }
  if (a.length < b.length) {
   if (i > a[1]) {
    i = a[1];
   }
   if (b.length < a.length) {
    if (i > b[1]) {
     i = b[1];
    }
   }
   for (j = 0; j < b.length; j++) {
    for (i = 0; i < a.length; i++) {
     a[i] = b[j];
     b[j] = a[i];
    i = j;
    j = i;
    }
   }
  }
  swapArray();
  return
 }
}
Mein Problem ist:
Bei den beiden for-Schleifen wird zwar irgendwo das tauschen erfüllt, aber ich durchdringe einfach nicht, wie
ich jetzt das from-to Problem lösen kann.
 
mihe7

mihe7

Top Contributor
Mein Problem ist:
Dein Problem ist, dass man bei Dir auch nach Wochen nicht erkennen kann, dass Du irgendein Verständnis für die Programmierung entwickelt hättest.

Bei den beiden for-Schleifen wird zwar irgendwo das tauschen erfüllt,
Wenn die beiden for-Schleifen das Tauschen erfüllen, fress ich 'nen Besen.

aber ich durchdringe einfach nicht, wie
ich jetzt das from-to Problem lösen kann.
Du durchdringst schon nicht, dass man swapArray() nicht ohne Parameter aufrufen kann, dass Du keine for-Schleife brauchst/haben sollst (Rekursion!) und wie man zwei Elemente in Arrays tauscht.

Wenn Du da wirklich weitermachen willst, löse folgende Aufgaben:
1. schreibe eine rekursive Methode, die die Zahlen von i bis 10 (jeweils inkl.) ausgibt.
Java:
public static void zeigeZahlen(int i) { ... }
2. erweitere die Methode um den Parameter j, so dass alle Zahlen von i bis j (jeweils inkl.) ausgegeben weren
Java:
public static void zeigeZahlen(int i, int j) { ... }
3. erweitere die Methode derart, dass die Anzahl der ausgegebenen Zahlen(i bis j) zurückgegeben wird:
Java:
public static int zeigeZahlen(int i, int j) { ... }
 
J

jono

Top Contributor
Ja, ich versuche jetzt die Aufgabe zu lösen.
Und mir ist bewusst, dass man diese ohne Parameter nicht aufrufen kann.
Außerdem habe ich das mit der Rekursion noch nicht ganz drauf, erstes mal halt.
Und ich finde, dass du Nicht einfach behaupten kannst, ich hätte nach Wochen kein Verständnis
dafür entwickelt, finde ich etwas überzogen, ich bekomme jetzt einige Aufgaben alleine hin zumindest
und habe auch vieles verstanden? Kannst du doch daraus jetzt nicht ableiten. und jede Aufgabe war
von der Thematik her eine neue auch wenn sich Dinge in anderen Themen überschneiden, trotzdem
ist deine Aussage sehr oberflächlich
 
J

jono

Top Contributor
mit den for schleifen war ich mir auch nicht sicher, deshalb wollte ich ja auch mal nachfragen, um zu wissen ob das bullshit ist.
Aber was sagst du denn was die for Schleife hier in mit den Anweisungen in dem Fall hier macht ? Würde mich echt mal
interessieren.
 
J

jono

Top Contributor
Das return ist natürlich auch noch offen, ist auch klar dass das so nicht fertig wäre
 
mihe7

mihe7

Top Contributor
du Nicht einfach behaupten kannst, ich hätte nach Wochen kein Verständnis
dafür entwickelt
Zum einen habe ich das nicht behauptet, ich habe geschrieben, dass man es nicht erkennen kann. Zum anderen wäre eine solche Behauptung auch nicht aus der Luft gegriffen; ich erinnere mich z. B. an den 2D-Array-Thread. Wenn Du Dir Deinen Code anschaust, würdest Du sagen, dass dieser von irgendeinem Verständnis bzgl. der Arrays zeugt?

jede Aufgabe war
von der Thematik her eine neue auch wenn sich Dinge in anderen Themen überschneiden, trotzdem
ist deine Aussage sehr oberflächlich
Mit dem feinen Unterschied, dass die neue Thematik in Deinem Code gar keine Rolle spielt: Du hast eine iterative "Lösung" für ein Problem angegeben, das vom Schwierigkeitsgrad her knapp über dem Kopieren eines Arrays in ein anderes liegt. Diese Lösung enthält nicht einfach nur ein, zwei Fehler - was durchaus vorkommen kann - sondern ist dermaßen falsch (s. u.), dass man nicht mal erahnen kann, welche Idee dahinterstecken könnte.

Aber was sagst du denn was die for Schleife hier in mit den Anweisungen in dem Fall hier macht ? Würde mich echt mal
interessieren.
Erstens bekommst Du i und j übergeben, die Du dann mal eben auf 0 setzt und iterierst dann über das gesamte Array. Zweitens auch noch verschachtelt. Drittens kopierst Du mit dem Code im Rumpf der inneren Schleife einen Wert von Array b, Position j, nach Array a, Position i. Anschließend kopierst Du den Wert, den Du eben kopiert hast, wieder zurück. Mal abgesehen davon, dass der zweite Schritt vollkommen überflüssig ist, wird der Wert von a[i] verloren bleiben. Viertens kopierst Du dann j nach i, was dazu führt, dass die innere Schleife niemals terminiert, wenn a wenigstens zwei Elemente enthält.
 
J

jono

Top Contributor
Java:
public class Functionality{
 
    public static void swapArray(int[] dataA, int[] dataB, int from, int to) {
        if (from > to || dataA.length <= from || dataB.length <= from)
            return;
        int tmp = dataB[from];
        dataB[from] = dataA[from];
        dataA[from] = tmp;
        swapArray(dataA, dataB, ++from, to);
       
    }
   
}

Im Prinzip so ? Nur wie erhalte ich jetzt die Anzahl

:rolleyes:
 
J

jono

Top Contributor
Dann müsste ich ja void durch int ersetzen und das "return;" auch mit einem int rückgabetyp umändern?
 
J

jono

Top Contributor
Java:
public class Functionality{
 
    public static int swapArray(int[] dataA, int[] dataB, int from, int to) {
     if(dataA == null || dataB == null) return 0;
     
        if (from < 0 && from > to || dataA.length < from || dataB.length < from)
            return 0;
        int tmp = dataB[from];
        dataB[from] = dataA[from];
        dataA[from] = tmp;
        swapArray(dataA, dataB, ++from, to);
       
    }
   
}
Muss vor das swapArray noch ein return?
 
J

jono

Top Contributor
Also wird halt vorgeschlagen vom Programm, aber ich meiner Intuition nach macht es nicht wirklich Sinn.
Ich muss doch jetzt irgendwie noch die Anzahl der Vertauschungen definieren, oder?
 
J

jono

Top Contributor
Java:
/root/autocorrectorBNQIZIdir/PublicTests.java:15: error: incompatible types: int cannot be converted to int[]        
 assertEquals(4, Functionality.swapArray(1, 4, a, b));

/root/autocorrectorBNQIZIdir/PublicTests.java:28: error: incompatible types: int cannot be converted to int[]        
 assertEquals(1, Functionality.swapArray(3, 3, a, b));

/root/autocorrectorBNQIZIdir/PublicTests.java:41: error: incompatible types: int cannot be converted to int[]        
assertEquals(6, Functionality.swapArray(1, 400, a, b));

/root/autocorrectorBNQIZIdir/PublicTests.java:50: error: incompatible types: int cannot be converted to int[]        
assertEquals(0, Functionality.swapArray(0, 0, a, b));

/root/autocorrectorBNQIZIdir/PublicTests.java:54: error: incompatible types: int cannot be converted to int[]      
  assertEquals(0, Functionality.swapArray(0, 0, c, d));

/root/autocorrectorBNQIZIdir/PublicTests.java:62: error: incompatible types: int cannot be converted to int[]        
assertEquals(0, Functionality.swapArray(-2, 3, a, b));

/root/autocorrectorBNQIZIdir/PublicTests.java:63: error: incompatible types: int cannot be converted to int[]       
assertEquals(0, Functionality.swapArray(4, 3, a, b));

/root/autocorrectorBNQIZIdir/PublicTests.java:64: error: incompatible types: int cannot be converted to int[]        
assertEquals(0, Functionality.swapArray(9, 12, a, b));
Das sind die Fehlermeldungen.
 
J

JustNobody

Top Contributor
Also es ist doch der Methodenkopf vorgegeben worden:
Java:
 public static int swapArray(int i, int j, int[] a, int[] b) {
(So habe ich zumindest den ersten Satz der Aufgabe verstanden ("Gegeben ist die Signatur der Methode swapArray in Functionality.java.")

Also ist es schon eine gute Leistung, diesen vorgegebenen Part anzupassen. (Und der Fehler besagt ja auch nichts anderes. Er versucht die Methode aufzurufen nur der erste Parameter ist nun ein int und der kann er nicht in ein array von Ints umwandeln ....

Und ein paar einfache Hinweise, die Du wirklich beherzigen solltest:
a) Wenn eine Methode einen Wert zurück gibt, dann nutz ihn auch. Es gibt nur sehr selten den Fall, dass dies anders ist.
b) Als Anfänger solltest Du NIEMALS den ++ Operator innerhalb von anderen Statements aufrufen. Du hast Probleme, Code zu übersehen und dann ist sowas garantiert Kontraproduktiv. Ein swapArray(dataA, dataB, ++from, to) ist also etwas, das in meinen Augen schlicht idiotisch ist!
c) Parameter sind eine Eingabe und sollten nicht verändert werden. Das ist evtl. am Anfang etwas blöd, vor allem wenn es scheint, als ob da schon fast dazu aufgefordert wird (".. so wird ... für "to" verwendet.") Das ist aber ähnlich blöd wie der Punkt b. Wenn Du eine Eingabe bereinigen musst, dann hab einen Parameter eingabe und von mir aus eine Variable bereinigteEingabe.

Das einfach einmal als kleine Hilfestellung ... über den Punkt c) mag man ja gerne diskutieren wollen, aber a und b solltest Du beherzigen. Und wenn Du bei a) einen Rückgabewert nicht nutzt, dann hab eine gute Begründung dafür parat, warum Du diesen hier einfach weg wirfst.
 
J

jono

Top Contributor
Ja, dann hab ich doch richtig gedacht, dass es, steht ja auch da dass int nicht in int[] komvertiert werden kann. Hatte ich übrigens auch schon geändert
 
R

Rahza

Mitglied
Wie in der Aufgabe vorgegeben wurde, soll für den Fall, dass das Array null ist, 0 zurückgegeben werden.

Hierzu eine allgemeine Frage:
Reicht bei sowas die Abfrage if (array == null)?
Oder sollte auch array.length == 0 bzw. die Tatsache, dass array==null für alle i gesprüft werden?
 
Zuletzt bearbeitet:
J

jono

Top Contributor
Aber laut meiner Fehlermeldung dürfte es nicht so sein
@JustNobody Wie ist das denn jetzt mit dem Rückgabetyp?
Java:
return swapArray(++from, to, dataA, dataB);
Wenn ich das zurückgebe, reicht das ja noch nicht aus.
Vielleicht eine kleine Hilfestellung wie ich darauf komme, was genau ich jetzt zurückgeben muss?
Verstehe was dahintersteckt, nur wie ich die Anzahl der Vertauschungen jetzt definiere ist mir ziemlich
unersichtlich
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
macle Rekursive String Methode, Gerade Zahlen rausfiltern Java Basics - Anfänger-Themen 10
M Rekursive Prüfung ob ein Array sortiert ist... Java Basics - Anfänger-Themen 4
D Rekursive Methode Java Basics - Anfänger-Themen 8
R Methoden rekursive Methoden Java Basics - Anfänger-Themen 6
O Quersumme rekursive Methode Java Basics - Anfänger-Themen 3
B Treetable (rekursive Funktion) aufbauen von Datenbank Java Basics - Anfänger-Themen 4
M Rekursive Methode Programmieren Java Basics - Anfänger-Themen 3
J rekursive Methode Java Basics - Anfänger-Themen 26
M rekursive division/0 mit exception Java Basics - Anfänger-Themen 18
J Rekursive Methode - Ziffern einer Zahl ausgeben Java Basics - Anfänger-Themen 2
M Rekursive Dateiliste erstellen mit Dateiendung(en) ?? Java Basics - Anfänger-Themen 4
S Rekursive Methode Java Basics - Anfänger-Themen 8
O Rekursive Methode Java Basics - Anfänger-Themen 4
V Methoden Rekursive Methode mit String als Rückgabe Java Basics - Anfänger-Themen 7
K Rekursive Methode Java Basics - Anfänger-Themen 1
K Rekursive Methode für Fakultät mit BigInteger Java Basics - Anfänger-Themen 10
L Rekursive Methode a * b berechnen Java Basics - Anfänger-Themen 2
L Rekursive Methode zur Berechnung der Potenz q hoch p Java Basics - Anfänger-Themen 17
J Methoden Rekursive Return Methode Java Basics - Anfänger-Themen 2
G Harmonische Rekursive Folge Java Basics - Anfänger-Themen 3
T Stack Overflow - Rekursive Fibonacci Java Basics - Anfänger-Themen 10
B Datentypen Suchbaum - Rekursive Ausgabe Java Basics - Anfänger-Themen 1
P Methoden Rekursive Methode für Potenzen Java Basics - Anfänger-Themen 2
M Methoden Binäre Suche als rekursive Variante Java Basics - Anfänger-Themen 5
B Rekursive Algorithmus schreiben Java Basics - Anfänger-Themen 8
S Eine rekursive Lösung Java Basics - Anfänger-Themen 4
S Int zu Hexadezimal - Rekursive Methode Java Basics - Anfänger-Themen 2
M Rekursive Suche in einem Feld Java Basics - Anfänger-Themen 11
N Rekursive Addition mit Scanner Java Basics - Anfänger-Themen 12
shiroX OOP Rekursive und Iterative Definition Java Basics - Anfänger-Themen 2
B Methoden Rekursive Methoden Java Basics - Anfänger-Themen 2
T Iterative Pi Berechnung in Rekursive Java Basics - Anfänger-Themen 2
C rekursive methode Java Basics - Anfänger-Themen 2
D Methoden Rekursive Methoden Java Basics - Anfänger-Themen 13
R rekursive Methode funktioniert nicht Java Basics - Anfänger-Themen 4
M Stürzen alle Rekursive Methoden irgendwann ab? Java Basics - Anfänger-Themen 11
D Primzahlen und Rekursive Liste Java Basics - Anfänger-Themen 29
R Rekursive Methode, Files finden Java Basics - Anfänger-Themen 2
S rekursive folge verbessern Java Basics - Anfänger-Themen 2
C rekursive Methode verstehe nicht! Java Basics - Anfänger-Themen 3
S Methoden rekursive Methode funktioniert nicht Java Basics - Anfänger-Themen 4
E Rekursive Methode Java Basics - Anfänger-Themen 3
N Methoden Rekursive Fibonaccizahlen mit Array Java Basics - Anfänger-Themen 2
R Rekursive Ausgabe eines Binärbaums Java Basics - Anfänger-Themen 4
J Methoden Rekursive Potenz ohne Math.Pow() Java Basics - Anfänger-Themen 9
A Rekursive Methode in Iterative umwandeln Java Basics - Anfänger-Themen 6
S Labyrith Rekursive Wegsuche Java Basics - Anfänger-Themen 4
C Rekursive Methode - Ziffern in Zahl Java Basics - Anfänger-Themen 33
U Dezimal zu Hexadezimal rekursive Funktion Java Basics - Anfänger-Themen 8
M rekursive Funktion zur Berechnung der Spiegelzahl Java Basics - Anfänger-Themen 7
L iterative und rekursive Folge Java Basics - Anfänger-Themen 20
G Rekursive Methode Java Basics - Anfänger-Themen 3
A rekursive Listen in Java? Java Basics - Anfänger-Themen 5
B OOP Einfach verkettete Liste - rekursive Methoden Java Basics - Anfänger-Themen 1
E Rekursive Methode mit Zufallsarray Java Basics - Anfänger-Themen 6
E Rekursive Methode Java Basics - Anfänger-Themen 18
U Rekursive lösung von pascal dreieck Java Basics - Anfänger-Themen 11
M Rekursive Methode - wo ist der Fehler? Java Basics - Anfänger-Themen 4
J rekursive methode Java Basics - Anfänger-Themen 6
H ScrollBar inaktiv / Rekursive Methode Java Basics - Anfänger-Themen 4
J Rekursive Methode Java Basics - Anfänger-Themen 11
G Rekursive Methode Java Basics - Anfänger-Themen 5
N Rekursive Berechnung der Höhe eines binären Baumes Java Basics - Anfänger-Themen 4
K Rekursive Methoden Java Basics - Anfänger-Themen 15
K Rekursive Funktion (Verständnissfrage) Java Basics - Anfänger-Themen 5
S Rekursive Bruch potenzierung Java Basics - Anfänger-Themen 2
D rekursive Summenberechnung Java Basics - Anfänger-Themen 8
J Rekursive Methode: Fakultaet berechnen Java Basics - Anfänger-Themen 5
E Rekursive definierten Folge Java Basics - Anfänger-Themen 10
A HILFE! Rekursive Funktion Java Basics - Anfänger-Themen 20
kulturfenster rekursive Binaere Suche Java Basics - Anfänger-Themen 12
F Rekursive Aufrufe, Parameterübergabe, call by reference Java Basics - Anfänger-Themen 3
G Rekursive Berechnung von n über k schlägt fehl Java Basics - Anfänger-Themen 5
B Rekursive & schreiben im ArrayList Java Basics - Anfänger-Themen 2
J Rekursive Fkt. Java Basics - Anfänger-Themen 2
A Rekursive Dateisuche Java Basics - Anfänger-Themen 12
K rekursive Funktion mit mehreren Parametern Java Basics - Anfänger-Themen 5
G rekursive Methode Java Basics - Anfänger-Themen 3
N rekursive Beispiele Java Basics - Anfänger-Themen 3
G rekursive u iterative Methode Java Basics - Anfänger-Themen 8
G Rekursive Methode Java Basics - Anfänger-Themen 7
ven000m Rekursive Funktionen - Frage Java Basics - Anfänger-Themen 16
D rekursive ausgabe einer zahl Java Basics - Anfänger-Themen 14
S Rekursive Funktionen in imperative Funktionen umwandeln Java Basics - Anfänger-Themen 2
M Rekursive Binärsuche Java Basics - Anfänger-Themen 6
S rekursive methoden Java Basics - Anfänger-Themen 5
NeoLexx equals()-Methode Verständnis Frage anhand Code Beispiel Java Basics - Anfänger-Themen 19
X compareTo Methode wird ignoriert Java Basics - Anfänger-Themen 7
B Wie kann ich etwas vor der Main-Methode ausführen? Java Basics - Anfänger-Themen 21
J Methode als Class anlegen Java Basics - Anfänger-Themen 7
K Übergabe von Werten (zweidimensionales Array) aus einer Methode an zweidimensionales Array in main() Java Basics - Anfänger-Themen 3
M this.object in einer parameterlosen Methode verwenden Java Basics - Anfänger-Themen 3
P Methode trim() ohne StringBuilder Java Basics - Anfänger-Themen 1
N Selection Algorithmus: Methode wird nicht erkannt (BlueJ) Java Basics - Anfänger-Themen 3
P Problem beim Überschreiben einer vererbten Methode Java Basics - Anfänger-Themen 4
B Methode für jede beliebe Entity erstellen Java Basics - Anfänger-Themen 7
O BiPredicate in einer forEach Methode Java Basics - Anfänger-Themen 10
B Klassen Abstrake Klasse und Template Methode Java Basics - Anfänger-Themen 4
parrot Array: Methode fügeHinzu Java Basics - Anfänger-Themen 13
B Eine Methode erstellen Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Anzeige


Oben