Записки программиста Программирование и не только

8Окт/121

[Java] Пример перегрузки методов. Тонкость в передаче параметров

С помощью перегрузки функций можно получить метод с одним именем, но разными реализациями.

Например, есть функция сортировки, которая принимает в качестве параметра целочисленный массив. Как научить её воспринимать и вещественные массивы?

Надо перегрузить функцию:

class Sort {
    void gnom_sort(int[] mas) {
        int p = 2;
        int i = 1;
        for (; i < mas.length; ) {
            if (mas[i - 1] <= mas[i]) {
                p++;
                i = p;
            } else {
                int a = mas[i];
                mas[i] = mas[i - 1];
                mas[i - 1] = a;
                i--;
                if (i == 0) {
                    p++;
                    i = p;
                }
            }
        }
    }

    void gnom_sort(double[] mas) {    //перегруженная функция
        int p = 2;
        int i = 1;
        for (; i < mas.length; ) {
            if (mas[i - 1] <= mas[i]) {
                p++;
                i = p;
            } else {
                double a = mas[i];
                mas[i] = mas[i - 1];
                mas[i - 1] = a;
                i--;
                if (i == 0) {
                    p++;
                    i = p;
                }
            }
        }
    }
}

class Hello {
    public static void main(String args[]) {
        int masI[] = {5, 5, 9, 8, 0, -5, 9, 10};
        double masD[] = {5.9, 5.7, 9.6, 8.9, 0.7, -5.6, 9.9, 10.0};
        Sort s1 = new Sort();
        s1.gnom_sort(masI);
        s1.gnom_sort(masD);        //для нас ничего не изменилось
}

А теперь обещанная тонкость
В Java в качестве параметров в функции передаются ссылки, а не значения. Кроме примитивных типов (int, long, float и т.п.).
Массив уже не является примитивным.
Что это значит. Это значит, что, передав объект (например тот же массив) в функцию, этот самый объект может быть в этой функции изменён безвозвратно.

Как пример. Создаём один массив и хотим проверить на нём несколько функций сортировки. Но после первой же функции массив станет отсортированный и дальнейшая его сортировка бессмысленна.

А вот как с этим жить дальше я пока не понимаю :(

Комментарии (1) Пинги (0)
  1. Спасибо за пост.
    У вас ошибка в 3 и 23 строчке: p = 1. Иначе, не все сортирует.


Leave a comment

Нет обратных ссылок на эту запись.