Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Примеры использования методов

Читайте также:
  1. D. Программы использования
  2. I. Отчет составляется по строго установленной форме с учетом возможности использования вычислительной техники для ее обработки.
  3. А какие примеры привести, объясняя, почему нельзя на себя надевать личины ведьм, вампиров, вурдалаков и просто нечистой силы?
  4. Алгоритмы обратимых методов
  5. Аллельные гены. Определение. Формы взаимодействия. Множественый аллелизм. Примеры. Механизм возникновения.
  6. Анализ использования земель г. Москвы
  7. Анализ использования фонда рабочего времени

Лабораторная работа №8

Перегрузка методов в языке Java

Цель работы: создание методов типа функция и процедура на Java.

Оборудование: ПЭВМ IBM PC-AT 486 и выше.

Программные средства: Eclipse SDK версии 4.2.1 – win32, среда выполнения Java JRE-7u13-windows-i586

1. Продемонстрировать работу преподавателю, оформить отчет, сделать выводы.

Задание к лабораторной работе

1. Написать программу, содержащую перегруженные методы:

· без параметров,

· с переменным числом параметров

· с параметром заданного явно: одномерный массив типа intи double.

· с параметром заданного явно: двумерный массив типа intи double.

2. Расставить комментарии по листингу программы.

3. Продемонстрировать работу программы.

4. Оформить отчет. Ответить на контрольные вопросы.

 

Краткая теория

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

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

void pr(double a) { System.out.println(a);}void pr (String a) { System.out.println(a);}void pr(int[] a) { for (int i=0; i<a.length; i++) { System.out.print(a[i]+" ") } System.out.println();}

Пример использования метода.

int a = 5;int [] m = {1, 2, 8, 3}String s = "Мир";pr (a) //работает исходный методpr (a+s); // 5 мир, работает первая перегрузкаpr (m); // 1 2 8 3pr (m+a); // ошибка

Переменная а не относится к типу double, но её обрабатывает исходный метод, поскольку возможно автоприведение из int в double. В обратном направлении оно невозможно. Если бы метод имел аргумент типа int, то с его помощью вещественные числа выводить не получилось бы.

Перегрузка методов реализует такое важное свойство в программировании, как полиморфизм. Полиморфным называется программный код, который связан с одним общим именем, но имеет разные реализации. Какая из реализаций будет работать, выбирается на основе контекста, в котором имя было упомянуто. Конкретно для методов полиморфными являются их перегрузки, а выбор исполняемой перегрузки происходит по параметрам.

Полиморфизм: одно имя, много форм.

Примеры использования методов

Пример 1. Следующая программа ищет и выводит на экран все простые нетривиальные делители числа, введённого пользователем с клавиатуры, начиная с наибольшего из делителей, либо сообщает, что введённое число — является простым.

import java.util.Scanner;public class Main { public static boolean isPrime(int n) { for(int i = 2; i <= Math.sqrt(n); i++) { if(n%i == 0) { return false; } } return true; } public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.print("Введите натуральное число: "); if(sc.hasNextInt()) { int u = sc.nextInt(); if(u > 0) { if(isPrime(u)) { System.out.println("Вы ввели простое число"); } else { System.out.print("Простые делители числа: "); for(int i = (int)Math.sqrt(u); i >= 2; i--) { if(u%i == 0 && isPrime(i)) { System.out.print(i+" "); } } System.out.println(); } } else { System.out.println("Вы ввели не положительное число"); } } else { System.out.println("Вы ввели не целое число"); } }}

Пример 2. В следующем примере за счёт перегрузки будет создано несколько одноимённых методов.

Первый вариант метода будет просто переводить строку, т. е. фактически являться боле коротким синонимом встроенного метода System.out.println(). Параметров у этого варианта не будет.

Второй вариант метода (его первая перегрузка), проверяет, есть ли у числового аргумента дробная часть, если её нет, то аргумент приводится к целым и выводится на экран без нулевой дробной части (3 вместо 3.0). В этот метод смогут в качестве единственного аргумента передаваться не только переменные типа double, но и переменные любого другого типа, для которого возможно автоприведение к double (например, любые целочисленные переменные).

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

Четвёртый метод выводит числовой массив, обрабатывая каждый элемент уже существующим методом. После каждого выведенного элемента добавляется переданный в параметре разделитель.

public class Main { public static void pr() { System.out.println(); } public static void pr(double d) { if((int)d == d) { System.out.print((int)d); } else { System.out.print(d); } } public static void pr(double[] m) { pr(m, " "); } public static void pr(double[] m, String s) { for(int i = 0; i < m.length; i++) { pr(m[i]); System.out.print(s); } } public static void main(String[] args) { double[] arrn = {1, 2.71, 3.14, 15, -5, 92, 0.5}; double p = 3.0; int k = 13; pr(p); // вывод числа, без дробной части при возможности pr(); // переводит строку pr(arrn); // вывод числового массива в строку pr(); // переводит строку pr(arrn,", "); // вывод числового массива в строку через запятую pr(); // переводит строку pr(k); // вывод целого числа через автоприведение }}

В результате работы программы на экран будет выведено:

31 2.71 3.14 15 -5 92 0.51, 2.71, 3.14, 15, -5, 92, 0.5,1

 

Пример 3. В программе реализованы перегруженные методы процедурного типа: без параметров, с переменным числом параметров.

 

public class lab7 {

/**

* @param args

*/

public static void main(String[] args) {

sum();

int [][] mas1={{1,2,3,4,5,6,7,8,9},

{12,23,34,40,50,60,70},

{234,345,456,31,12,1}};

System.out.println("Суммы элементов массива "+sum(mas1));

System.out.println("Суммы элементов первой строчки "+sum(mas1[0]));

double [][] mas2= new double [mas1.length][];

for ( int i=0; i<mas1.length; i++)

{mas2[i]= new double [mas1[i].length];

for ( int j=0; j<mas1[i].length; j++)

mas2[i][j]=( double )(mas1[i][j])/10;}

System.out.println("Суммы элементов массива деленного на 10: "+sum(mas2));

System.out.print("Суммы элементов 5,6,7,8,9,10,11,12,13,14,15: ";

sum(5,6,7,8,9,10,11,12,13,14,15));

double [][] mas3=sum(mas2, ( int )1);

for ( int i=0; i<mas3.length; i++)

{System.out.println("");

for ( int j=0; j<mas3[i].length; j++)

System.out.print(mas3[i][j]+"\t");

}

}

/* Пример перегруженного метода без параметров*/

public static void sum()

{

System.out.println("Мовчан А.Г. ФИТ 2-2А");

}

/* Пример перегруженного метода функционального типа с параметром(двухмерный int)*/

public static int sum( int [][] ar)

{ int rez=0;

for ( int i=0; i<ar.length; i++)

for ( int j=0; j<ar[i].length; j++)

rez+=ar[i][j];

return rez;

}

/* Пример перегруженного метода функционального типа с параметром(одномерный int)*/

public static int sum( int [] ar)

{ int rez=0;

for ( int i=0; i<ar.length; i++)

rez+=ar[i];

return rez;

}

/* Пример перегруженного метода функционального типа с параметром(двухмерный double)*/

public static double sum( double [][] ar)

{ double rez=0;

for ( int i=0; i<ar.length; i++)

for ( int j=0; j<ar[i].length; j++)

rez+=ar[i][j];

return rez;

}

/* Пример перегруженного метода процедурного типа с параметром*/

public static void sum( double ... args)

{ double rez=0;

for ( int i=0; i<args.length; i++)

rez+=( double )args[i];

System.out.println(rez);

}

/* Пример перегруженного метода функционального типа с параметром(двухмерный double)*/

public static double [][] sum( double [][] ar, int r)

{ double [][] rez= new double [ar.length][];

rez= new double [ar.length][];

for ( int i=0; i<ar.length; i++)

{rez[i]= new double [ar[i].length];

for ( int j=0; j<ar[i].length; j++)

rez[i][j]=ar[i][j]-5.0;}

return rez;

}

}

Контрольные вопросы и задания

1. Что такое сигнатура метода?

2. Приведите примеры сигнатур методов в созданной программе.

3. Что такое перегрузка методов?

4. В каком случае возможно автоприведение типов параметров в перегружаемых методах?

5. Перечислите основные понятия объектно-ориентированного программирования.

6. С каким из этих понятий связан механизм перегруженных методов. Дайте определение этого понятия.

 


Приложение 1. Варианты заданий к лаб. раб. № 8.

№ вар. Функция без параметров Функция с переменным числом параметров Одномерный(int) и двумерный(double) массивы Одномерный(double) и двумерный(int) массивы
  Печать фамилии, имени и отчества Минимальный элемент в списке параметров Среднее арифметическое массива Найти сумму элементов кратных 3.
  Печать фамилии, имени и возраста Максимальный элемент в списке параметров Количество отрицательных элементов в массиве Количество положительных элементов в массиве
  Печать фамилии, курса и группы Количество четных элементов в списке параметров Максимальный элемент в массиве Поиск заданного элемента в массиве
  Печать фамилии, имени и рейтинга Среднее арифметическое элементов в списке параметров Минимальный элемент в массиве Количество четных элементов в массиве
  Печать фамилии, курса и рейтинга Максимальный из элементов в списке параметров, стоящих на четных местах Сумма элементов массивы Количество не четных элементов в массиве
  Печать фамилии, адреса и возраста Максимальный из элементов в списке параметров, стоящих на нечетных местах Уменьшение значения элементов главной (двумерный массив) диагонали на 5. Увеличение всех элементов(одномерный массив) на 3. Количество отрицательных элементов в массиве
  Печать названия экзамена, количества сдающих и среднего балла Минимальный из элементов в списке параметров, стоящих на четных местах Количество положительных элементов в массиве Максимальный элемент в массиве
  Печать названия экзамена, даты экзамена и среднего балла Минимальный из элементов в списке параметров, стоящих на нечетных местах Поиск заданного элемента в массиве Минимальный элемент в массиве
  Печать координат точки Среднее арифметическое из элементов в списке параметров, стоящих на четных местах Количество четных элементов в массиве Вывести элементы массива кратные 9
  Вычисление и печать расстояния от точки (x1,y1) до центра координат Среднее арифметическое из элементов в списке параметров, стоящих на нечетных местах Количество не четных элементов в массиве Найти произведение четных элемента массива.
  Вычисление и печать расстояния от точки (x1,y1) до точки (x2,y2) Минимальный элемент в списке параметров Количество элементов в массиве кратных 3 Количество положительных элементов в массиве
  Печать фамилии, имени и отчества Максимальный элемент в списке параметров Количество отрицательных элементов в массиве кратных 3 Поиск заданного элемента в массиве
  Печать фамилии, имени и возраста Количество четных элементов в списке параметров Найти произведение не четных элемента массива Количество четных элементов в массиве
  Печать фамилии, курса и группы Среднее арифметическое элементов в списке параметров Номер максимального элемента в массиве Количество не четных элементов в массиве
  Печать фамилии, имени и рейтинга Максимальный из элементов в списке параметров, стоящих на четных местах Среднее арифметическое массива Количество элементов в массиве кратных 3
  Печать фамилии, курса и рейтинга Максимальный из элементов в списке параметров, стоящих на нечетных местах Количество отрицательных элементов в массиве Количество не четных элементов в массиве
  Печать фамилии, адреса и возраста Минимальный из элементов в списке параметров, стоящих на четных местах Максимальный элемент в массиве Количество элементов в массиве кратных 3
  Печать названия экзамена, количества сдающих и среднего балла Минимальный из элементов в списке параметров, стоящих на нечетных местах Минимальный элемент в массиве Количество отрицательных элементов в массиве кратных 3
  Печать названия экзамена, даты экзамена и среднего балла Среднее арифметическое из элементов в списке параметров, стоящих на четных местах Количество элементов кратных 7 Уменьшение значения элементов главной (двумерный массив) диагонали на 5. Увеличение всех элементов (одномерн. массив) на 3.
  Печать координат точки Среднее арифметическое из элементов в списке параметров, стоящих на нечетных местах Количество элементов кратных 13 Номер максимального элемента в массиве

 

 

  Вычисление и печать расстояния от точки с координатами x1,y1 до центра координат Минимальный элемент в списке параметров Количество положительных элементов в массиве Среднее арифметическое массива
  Вычисление и печать расстояния от точки с координатами x1,y1 до точки с координатами x2,y2 Максимальный элемент в списке параметров Поиск заданного элемента в массиве Максимальный элемент в массиве
  Печать фамилии, имени и отчества Количество четных элементов в списке параметров Количество четных элементов в массиве Минимальный элемент в массиве
  Печать фамилии, имени и возраста Среднее арифметическое элементов в списке параметров Количество не четных элементов в массиве  
  Печать фамилии, курса и группы Максимальный из элементов в списке параметров, стоящих на четных местах Количество элементов в массиве кратных 3 Количество элементов кратных 5

 


Дата добавления: 2015-11-26; просмотров: 117 | Нарушение авторских прав



mybiblioteka.su - 2015-2024 год. (0.014 сек.)