[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. Иначе, не все сортирует.