Array umkehen, iterativ und rekursiv

pay

Mitglied
hey...^^ Mir wurde als Schulaufgabe aufgetragen, ein Programm zu schreiben, dass den Inhalt eines Arrays umkehrt (d.h., dass das erste und das letzte Element vertauscht werden, das zweite und das zweitletzte etc.). Und zwar soll dies einmal iterativ und einmal rekursiv verwirklicht werden. Die iterative Variante habe ich folgendermaßen gelöst:

Java:
import java.util.Scanner;

class innerhalbeinesarraysvertauschen {
  
  public static void main(String[] args) {
    
    Scanner scanner = new Scanner(System.in);
    System.out.println("Bitte geben Sie die gewünschte Größe des Feldes an.");
    int n = scanner.nextInt();
    int[] array = new int[n];
    int x = 0;
    while (x < n) {
      System.out.println("Belegen Sie " + x + " bitte mit einem Wert.");
      array [x] = scanner.nextInt();
      x++;
    }
    arrayumkehren(array);
  }
  
  public static void arrayumkehren(int[] array) {
    int left = 0;
    int right = array.length - 1;
    int temp;
while (left < right) {
      temp = array[left];
      array[left] = array[right];
      array[right] = temp;
      left++;
      right--;
    }
 for (int i = 0; i < array.length; i++) {
      System.out.println(array[i]);
    }
  }
}

Bei der iterativen Variante dürften keine größeren Fehler vorhanden sein. Die rekursive Variante bereitet mir aber noch Schwierigkeiten. Hier mein Versuch:

Java:
import java.util.Scanner;

class innerhalbeinesarraysvertauschenrek {
  
  public static void main(String[] args) {
    
    Scanner scanner = new Scanner(System.in);
    System.out.println("Bitte geben Sie die gewünschte Größe des Feldes an.");
    int n = scanner.nextInt();
    int[] array = new int[n];
    int x = 0;
    while (x < n) {
      System.out.println("Belegen Sie " + x + " bitte mit einem Wert.");
      array [x] = scanner.nextInt();
      x++;
    }
    
    
    
    array = arrayumkehren(array, 0, array.length - 1, 0);
    
    for (int h = 0; h < array.length; h++) {
      System.out.print(array[h]);
    }
  }
  public static int[] arrayumkehren(int[] array, int left, int right, int temp) {
    
    if (left < right) {
      temp = array[left];
      array[left] = array[right];
      array[right] = temp;
      
      return arrayumkehren(array, left++, right--, temp);
    }
    
    else {
    return array;
    }
  }
}

Mir ist nicht ganz klar, wo der Fehler sein könnte...auch nach diversen Versuchen nicht. Würde mich freuen, wenn ihr mir helfen könntet. Vielen Dank

Gruß
pay
 

XHelp

Top Contributor
Du solltest vlt mal "Fehler" genauer beschreiben.
Bei dir wir immer wieder die selben Werte in left und right übergeben. Entweder solltest du
Code:
++left
und
Code:
--right
verwenden, oder (was sinnvoller ist)
Code:
left+1
Code:
right-1
 

XHelp

Top Contributor
@Landei, hast natürlich recht. Ich habe das so in etwa angefangen zu tippen, aber dann fand ich die Erklärung zu verwirrend, deswegen habe ich mich für ein vereinfachtes, aber verfälschtes "tust du nicht" entschieden.
 

pay

Mitglied
Vielen Dank euch beiden...mir war bis gestern nicht bewusst, dass zwischen x++ und ++x ein Unterschied besteht; haben wir im Unterricht immer synonym verwendet, ohne auf Unterschiede einzugehen. Danke vielmals.

Gruß
pay
 

Neue Themen


Oben