Передача одного массива в разные методы [дубликат]

116
24 октября 2019, 01:00

На данный вопрос уже ответили:

  • Передача параметров в метод Java 2 ответа

Изучаю потихоньку виды сортировок на Java. Каждую сортировку реализую в отдельном методе. Не знаю почему, но в методы ниже sortBubble передается уже отсортированный массив. Разъясните, как исправить, чтобы в каждый метод, реализующий сортировку, подавался неотсортированный массив, созданный методом fillArray

public class OneThree {
    public static void main(String[] args) {
        int[] a = new int[20];
        fillArray(a);
        sortBubble(a);
        sortSelection(a);
        sortInsert(a);
    }
    static int[] fillArray (int[] a) {
        for (int i = 0; i < a.length; i++) {
            a[i] = (int) (Math.random()*9+1);
            System.out.print(a[i] + " ");
        }
        System.out.println();
        return a;
    }
    static void sortBubble (int[] a) {
        for (int i = 0; i < a.length; i++) {
            for (int j = a.length-1; j > i; j--) {
                if (a[j - 1] > a[j]) {
                    int tmp = a[j - 1];
                    a[j - 1] = a[j];
                    a[j] = tmp;
                }
            }
        }
        System.out.println("\nСортировка пузырьком:\n" + Arrays.toString(a));
    }
    static void sortSelection(int[] a) {
        for (int i = 0; i < a.length; i++) {
            int min = a[i];
            int min_i = i;
            for (int j = i+1; j < a.length; j++) {
                if (a[j] < min) {
                    min = a[j];
                    min_i = j;
                }
            }
            if (i != min_i) {
                int tmp = a[i];
                a[i] = a[min_i];
                a[min_i] = tmp;
            }
        }
        System.out.println("\nСортировка выбором:\n" + Arrays.toString(a));
    }
    static void sortInsert(int[] arr) {
        int tmp;
        int j;
        for (int i = 0; i < arr.length-1; i++) {
            if(arr[i] > arr[i+1]) {
                tmp = arr[i+1];
                arr[i+1] = arr[i];
                j = 1;
                while (j > 0 && tmp < arr[j-1]) {
                    arr[j] = arr[j-1];
                    j--;
                }
                arr[j] = tmp;
            }
        }
        System.out.println("\nСортировка вставками:\n" + Arrays.toString(arr));
    }
}
Answer 1

В Java массив передается по ссылке - это значит, что вы передаете не копию массива(как с примитивными типами), а ссылку на массив. Когда вы в методе сортируете массив, у вас сортируется не копия, а изначальный массив. А потом вы передаете в остальные методы уже отсортированный массив.

Как написал Pavel, передавайте в каждый метод копию исходного массива: sortBubble(a.clone()), sortSelection(a.clone), и т.д.

Более подробно.

READ ALSO
Доступ к массиву из другого класса java

Доступ к массиву из другого класса java

хочу сделать так, чтобы при вызове метода из другого класса можно было менять значение его массива на нужное мне, но никак не выходит это сделать...

146
Многопоточность java прогрессия [закрыт]

Многопоточность java прогрессия [закрыт]

Найти сумму арифметической прогрессии f(n, N) = n + 2n + 3n + 4n + 5n +

115
Можно ли создать глобальный класс для конфигурации ApplicationContxt в Spring?

Можно ли создать глобальный класс для конфигурации ApplicationContxt в Spring?

Подскажите можно ли создать глобальный класс конфигурации для ApplicationContext в Spring вместо того что бы использовать вот такой вот пример:

118
Как работает наследование Java

Как работает наследование Java

Не могу понять почему не работает базовый методСоздал абстрактный класс Rodent для задачи интерфейса

160