Wie lassen sich in einem Array zwei Werte tauschen?

Arrays haben in Java bekanntlich eine konstante Länge, sodass keine neuen Elemente hinzugefügt oder entfernt werden können. Unter Zuhilfenahme einer Hilfsvariablen lassen sich dennoch problemlos Elemente umsortieren.

Will man zwei Arrayelemente tauschen deren Indices bekannt sind, gestaltet sich das Vorgehen recht simpel: Man stellt zunächst sicher, dass beide Indices im Bereich der vorhandenen Arrayindices liegen. Der eigentliche Tausch findet so statt, dass der Wert des ersten Elementes durch eine Hilfsvariable zwischengespeichert wird. Dem ersten Element wird anschließend der Wert des zweiten Elementes übergeben. Dies übernimmt dann den zwischengespeicherten Wert des ersten Elementes.

public class IndexTausch {

    private static int[] intArr = { 5, 24, 18, 76 };

    public boolean tauschIndex(int l, int r) {

        if (l < 0 || l >= intArr.length) {
            System.err.println("Ausgangsindex zu hoch oder zu niedrig!");
            return false;
        }
        if (r < 0 || r >= intArr.length) {
            System.err.println("Zielindex zu hoch oder zu niedrig!");
            return false;
        }

        int k = intArr[l];
        intArr[l] = intArr[r];
        intArr[r] = k;
        return true;
    }

    public static void main(String[] args) {
        IndexTausch wt = new IndexTausch();
        System.out.println("vorher:");
        for (int i = 0; i < intArr.length; i++) {
            System.out.println(intArr[i]);
        }
        if (wt.tauschIndex(2, 0)) {
            System.out.println("\nnachher:");
            for (int i = 0; i < intArr.length; i++) {
                System.out.println(intArr[i]);
            }
        }
    }
}

Sind nicht die beiden Indices, sondern die in den Elementen gespeicherten Werte gegeben, gestaltet sich das Verfahren nur wenig anders: Zunächst wird das Array durchlaufen. Über eine if-Verzweigung wird abgefragt, ob der jeweilige Wert mit dem gesuchten Ausgangswert übereinstimmt. Ist dies der Fall, findet die gleiche Prozedur mit dem Zielwert statt. Der eigentliche Austausch findet anschließend wie gehabt statt.

public class WerteTausch {

    private static int[] intArr = { 5, 24, 18, 76 };

    public boolean tauschValue(int l, int r) {

        for (int i = 0; i < intArr.length; i++) {
            if (intArr[i] == l) {
                for (int j = 0; j < intArr.length; j++) {
                    if (intArr[j] == r) {
                        int k = intArr[i];
                        intArr[i] = intArr[j];
                        intArr[j] = k;
                        return true;
                    }
                }
                System.err.println("Zweiter Wert nicht im Array vorhanden!");
                return false;
            }
        }
        System.err.println("Erster Wert nicht im Array vorhanden!");
        return false;
    }

    public static void main(String[] args) {
        WerteTausch wt = new WerteTausch();
        System.out.println("vorher:");
        for (int i = 0; i < intArr.length; i++) {
            System.out.println(intArr[i]);
        }
        if (wt.tauschValue(5, 76)) {
            System.out.println("\nnachher:");
            for (int i = 0; i < intArr.length; i++) {
                System.out.println(intArr[i]);
            }
        }
    }
}

Wenn Ihnen javabeginners.de gefällt, freue ich mich über eine Spende an diese gemeinnützigen Organisationen.