Ungewolltes Sortieren eines Arrays

johannes20

Neues Mitglied
Hallo, ich hätte mal eine Anfängerfrage zu einem Code-Schnipsel von mir, da ich gerade echt auf dem Schlauch stehe.(Google will mir leider nicht so recht helfen)
Nach meinem Verständnis müsste das Array eigentlich in seiner ursprünglichen Form ausgeben werden und dann die niedrigste Zahl, allerdings wird es sortiert ausgegeben obwohl das Array ja eigentlich nur in der getMinNumber-Methode sortiert wird. Woran liegt das?
Java:
public void Sort() {
        int[] numbers = { 8, 3, 12, 14, 16, 19, 4, 8, 7, 2 };
        int minNumber = getMinNumber(numbers);
      
        for (int i = 0; i < numbers.length; i++) {
            System.out.println(numbers[i]);
        }
      
        System.out.println("Niedrigste Zahl:" + minNumber);
    }

    private int getMinNumber(int[] numbers) {
        Arrays.sort(numbers);
        return numbers[0];
    }

Danke für euer Hilfe =)
 
Zuletzt bearbeitet von einem Moderator:
Naja wie du schon sagtest: In der Methode getMinNumber wird dein Array sortiert und du rufst die Methode auch auf. Was ist da für dich ein Rätsel?

Java hat zwar call-by-value, aber in dem Fall von Arrays wird die "Startadresse" kopiert, aber die Elemente nicht. Wenn du nicht willst, dass dein Array sortiert wird, dann such bitte manuell, oder kopiere doch das Array in getMinNumber:
Java:
int[] copy = Arrays.copyOf(numbers, numbers.length);
 
Mal ganz davon abgesehen das ein schnelles durchiterieren und suchen des kleinsten Wertes um ein vielfaches schneller ist als ein komplettes Sortieren.

Gruß

Claus
 
oder du rufst erst die ausgabe auf und dann die getMinNumber( int[] numbers), dann hast du den gleichen effekt, nur eben ohne die sortierte ausgabe
 
Hallo Johannes,

das Problem ist, dass du wenn du den Array an die Methode getMinNumber(int[] numbers) übergibst, er nicht seinen Inhalt an die Methode weitergibt, sondern sich selbst. Das bedeutet dein Array, den du danach wieder ausgeben willst, wird sortiert und nicht seine Kopie. Bei primitiven Datentypen (int, char, boolean, double,....) wird immer der Wert übergeben, bei Objekten und Arrays das Objekt.

Eine Lösung wäre, dass du die Werte des Arrays, den du weitergibst, in einen neuen Array kopierst und dann diesen sortierst. Also dass du eine unabhängige Kopie sortierst.

Die andere Lösung wäre, dass du minNumber erst nach der Ausgabe vom Array initialisierst.

Lieben Gruß!
Freddy
 

Neue Themen


Zurück
Oben