[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
и т.п.).
Массив уже не является примитивным.
Что это значит. Это значит, что, передав объект (например тот же массив) в функцию, этот самый объект может быть в этой функции изменён безвозвратно.
Как пример. Создаём один массив и хотим проверить на нём несколько функций сортировки. Но после первой же функции массив станет отсортированный и дальнейшая его сортировка бессмысленна.
А вот как с этим жить дальше я пока не понимаю :(
Нет обратных ссылок на эту запись.
Апрель 7th, 2016 - 09:23
Спасибо за пост.
У вас ошибка в 3 и 23 строчке: p = 1. Иначе, не все сортирует.