Datentypen Werte im Array vertauschen

Hi, kann mir jemand erklären, warum folgende Methode von Vertauschen der ersten beiden Arrayeinträge nicht funktioniert?

Java:
public static void tausche(int[] a) {
        int[] c = new int[a.length];
        c[0] = a[1];
        c[1] = a[0];
        for (int i = 2; i < a.length; i++)
        c[i] = a[i];
        a = c;
        }


Vielen Dank für eure Hilfe.
 
Java:
    public static void main(String[] args) {
        tausche(new int[]{1,2,3,4,5});
    }

    public static void tausche(int[] a) {
        int[] c = new int[a.length];
        c[0] = a[1];
        c[1] = a[0];
        for (int i = 2; i < a.length; i++)
            c[i] = a[i];
        a = c;
    
        for(int i : a){
            System.out.print(i);
        }
    }

Vorher: 1 2 3 4 5
Nacher: 2 1 3 4 5
Funktioniert doch.

Dein Problem ist vermutlich diese Zeile:
"a=c". Du änderst die Referenz des Arrays, sodass diese auf ein anderes Array zeigt. Aber die Referenz des Arrays außerhalb der Methode wird dadurch nicht verändert. Am besten returnst du das Array einfach.
 
Zuletzt bearbeitet:
Gut 😉 Aber allgemein ist dir vermutlich klar, dass du die ersten beiden Einträge wesentlich einfacher tauschen könntest oder?
 
Also das Werte tauschen kann immer über eine einzige lokale Variable erfolgen. Anstatt ein neues Array zu erstellen kannst Du also einfach folgenden Code ausführen:
Java:
public static void tausche(int[] a){
       int temp = a[0];
       a[0] = a[1];
       a[1] = temp;
}

Konrad
 
public class Main
{
public static void main(String[] args) {
int a[] = {4, 8, 3, 1, 18, 9, 21, 20, 5, 17};
int i, size, temp;
size = 10;

temp = a[0];
for (i = 1; i < size; i = i + 1)
a[0] = a[1];
a[1] = temp;

for (i = 0; i < size; i = i + 1)
System.out.print(a + " ");

}
}

Java:
public static void main(String[] args) {
        int a[] = { 4, 8, 3, 1, 18, 9, 21, 20, 5, 17 };
        int i, size, temp; // Brauchst du hier noch nicht deklarieren
        size = 10; // Brauchst du nicht, grösse vom Array kannst du mit a.length(); abrufen

        temp = a[0]; //Hier temp deklarieren und initialisieren -> int temp = a[0];
        for (i = 1; i < size; i = i + 1) // For-Schleife brauchst du hier nicht und nutzt du auch nicht
        a[0] = a[1];
        a[1] = temp;

        for (i = 0; i < size; i = i + 1) // -> for(int i = 0; i < a.length(); i++), und nutze geschweifte Klammern auch wennn
                                         // es nur eine Zeile ist
            System.out.print(a + " ");    //Du musst den Index bei der Ausgabe mit angeben in Form deiner Schleifen-Variable i
                                        // -> a[i]
    }
 
Java:
public static void main(String[] args) {
        int a[] = { 4, 8, 3, 1, 18, 9, 21, 20, 5, 17 };
        int i, size, temp; // Brauchst du hier noch nicht deklarieren
        size = 10; // Brauchst du nicht, grösse vom Array kannst du mit a.length(); abrufen

        temp = a[0]; //Hier temp deklarieren und initialisieren -> int temp = a[0];
        for (i = 1; i < size; i = i + 1) // For-Schleife brauchst du hier nicht und nutzt du auch nicht
        a[0] = a[1];
        a[1] = temp;

        for (i = 0; i < size; i = i + 1) // -> for(int i = 0; i < a.length(); i++), und nutze geschweifte Klammern auch wennn
                                         // es nur eine Zeile ist
            System.out.print(a + " ");    //Du musst den Index bei der Ausgabe mit angeben in Form deiner Schleifen-Variable i
                                        // -> a[i]
    }

Java:
public static void main(String[] args) {
        int a[] = { 4, 8, 3, 1, 18, 9, 21, 20, 5, 17 };
        int i, size, temp; // Brauchst du hier noch nicht deklarieren
        size = 10; // Brauchst du nicht, grösse vom Array kannst du mit a.length(); abrufen

        temp = a[0]; //Hier temp deklarieren und initialisieren -> int temp = a[0];
        for (i = 1; i < size; i = i + 1) // For-Schleife brauchst du hier nicht und nutzt du auch nicht
        a[0] = a[1];
        a[1] = temp;

        for (i = 0; i < size; i = i + 1) // -> for(int i = 0; i < a.length(); i++), und nutze geschweifte Klammern auch wennn
                                         // es nur eine Zeile ist
            System.out.print(a + " ");    //Du musst den Index bei der Ausgabe mit angeben in Form deiner Schleifen-Variable i
                                        // -> a[i]
    }
Vielen Dank für deine Tipps. Da hast du Recht. In der Anfängerphase wollte ich Code einfacher und verständlicher schreiben. Aber deine Vorschläge werden auch sehr behilflich sein.
 
Vielen Dank für deine Tipps. Da hast du Recht. In der Anfängerphase wollte ich Code einfacher und verständlicher schreiben. Aber deine Vorschläge werden auch sehr behilflich sein.
Einfach und verständlich ... bleib dabei. Das erspart dir auch später als erfahrenem Programmierer viel Kummer.
Die Tips von JensXF bezüglich Variablen und Klammersetzung werden dir auf lange Sicht helfen. Variablen sollten möglichst erst dort deklariert werden, wo man sie auch braucht.
Außerdem hilfreich: Eigene Methoden für immer wiederkehrende Aufgaben. Eine Methode tausche(int[] array, int index0, int index1) wäre z.b. sinnvoller und einfacher zu lesen als das direkte Vertauschen der Felder in der Methode, wo das Vertauschen notwendig wird. WIE vertauscht wird, interessiert dich an dem Punkt ja nicht und stört nur den Lesefluss. Außerdem fällt dann die temp-Variable im eigentlichen Programm weg.
 
Zuletzt bearbeitet:

Zurück
Oben