Передача масивів у методи за значенням. Приклади передачі масивів базових типів. Передача масивів структур, класів, зчислень у методи. Передача двовимірних масивів у методи. Повернення масиву з методу
У даній темі демонструється передача масивів різних типів за значенням.
Зміст
- 1. Як передати масив у метод? Яка загальна форма передачі одновимірного масиву в метод?
- 2. Приклад передачі масиву цілих (ulong) чисел в метод
- 3. Приклад передачі в метод масиву чисел типу double
- 4. Приклад передачі одновимірного масиву структур у метод
- 5. Приклад передачі одновимірного масиву класів у метод
- 6. Приклад передачі одновимірного масиву зчислень у метод
- 7. Приклад передачі двовимірного масиву цілих (int) чисел у метод
- 8. Приклад передачі двовимірного масиву класів у метод
- 9. Приклад повернення одновимірного масиву цілих чисел (int) з методу
- 10. Приклад повернення двовимірного масиву типу double з методу
- 11. Приклад повернення двовимірного масиву класів з методу
- 12. Приклад передачі двовимірного ступінчатого масиву у метод
- Зв’язані теми
Пошук на інших ресурсах:
1. Як передати масив у метод за значенням? Яка загальна форма передачі одновимірного масиву в метод?
Загальна форма передачі одновимірного масиву в метод за значенням має вигляд:
access return_type MethodName(type[] parameterName)
{
// ...
}
де
- access – модифікатор доступу (public, protected, private);
- return_type – тип, що повертає метод;
- MethodName – назва методу;
- type – тип масиву, що передається в метод;
- parameterName – назва масиву, який є формальним параметром методу MethodName.
⇑
2. Приклад передачі масиву цілих (ulong) чисел в метод
У прикладі продемонстровано метод ReverseArray, що реверсує масив чисел типу ulong. Метод отримує параметром масив items типу ulong.
// метод, що отримує масив items та обертає його public void ReverseArray(ulong[] items) { ulong t; // обертання масиву for (int i = 0; i < items.Length / 2; i++) { t = items[i]; items[i] = items[items.Length - i - 1]; items[items.Length - i - 1] = t; } return; }
Використання методу в іншому програмному коді може бути таким:
ulong[] Array = { 2, 3, 1, 2, 8, 5, 6, 100 }; ReverseArray(Array); // Array = { 100, 6, 5, 8, 2, 1, 3, 2 }
⇑
3. Приклад передачі в метод масиву чисел типу double
Реалізовано метод, що отримує масив чисел типу double в якості параметра. Метод повертає суму елементів масиву.
static public double SumDoubleArray(double[] items) { double sum = 0; for (int i = 0; i < items.Length; i++) sum += items[i]; return sum; }
Використання методу в іншому програмному коді може бути таким:
double[] Array = { 3.3, 2.2, 1.1, 7.7, 8.8 }; double sum; sum = SumDoubleArray(Array); // sum = 23.1
⇑
4. Приклад передачі одновимірного масиву структур у метод
Задано структуру Country, що описує інформацію про країну
// структура, що містить інформацію про країну struct Country { public string Name; // назва країни public ulong Population; // населення public string Capital; // назва столиці public double Area; // площа, квадратних кілометрів }
Реалізація методу MaxPopulation(), що визначає країну, яка має найбільше населення. Метод отримує масив структур Country.
// метод, що отримує масив структур типу Country // метод повертає структуру, що містить інформацію про країну з найбільшим населенням public Country MaxPopulation(Country[] countries) { int i; int numMax; // додаткова змінна double maxPopulation; if (countries.Length == 0) { Console.WriteLine("Не задано переліку країн"); return new Country(); } maxPopulation = countries[0].Population; numMax = 0; // for (i = 1; i < countries.Length; i++) if (countries[i].Population > maxPopulation) { maxPopulation = countries[i].Population; numMax = i; } return countries[numMax]; }
Демонстрація виклику методу MaxPopulation() з іншого програмного коду
Country[] countries = new Country[3]; // виділити пам'ять для трьох структур типу Country Country cn; countries[0].Name = "Ghana"; countries[0].Capital = "Accra"; countries[0].Area = 238537.0; countries[0].Population = 25199609; countries[1].Name = "Republic of South Africa"; countries[1].Capital = "Pretoria"; countries[1].Population = 54956900; countries[1].Area = 1219912.0; countries[2].Name = "Madagascar"; countries[2].Capital = "Antananarivo"; countries[2].Population = 23812681; countries[2].Area = 587041.0; // виклик методу MaxPopulation(), передача масиву структур в метод cn = MaxPopulation(countries); // cn.Name = "Republic of South Africa"
⇑
5. Приклад передачі одновимірного масиву класів у метод
Задано клас Cylinder, що реалізує циліндр
// клас, що реалізує циліндр class Cylinder { double r; double h; // конструктори public Cylinder() { r = 1; h = 1; } public Cylinder(double _r, double _h) { r = _r; h = _h; } // методи доступу public void Set(double _r, double _h) { r = _r; h = _h; } public void Get(out double _r, out double _h) { _r = r; _h = h; } // метод, що визначає об'єм циліндра public double Volume() { return 3.1415 * r * r * h; } }
Реалізація методу GetMaxVolumeCylinder, що отримує масив Cylinders. Метод повертає порядковий номер елементу масиву (циліндру), який має найбільший об’єм
// метод, що отримує масив класів типу Cylinder та визначає номер циліндру з найбільшим об'ємом static int GetMaxVolumeCylinder(Cylinder[] cylinders) { double maxV = cylinders[0].Volume(); int maxN = 0; for (int i=1; i<cylinders.Length; i++) if (maxV < cylinders[i].Volume()) { maxV = cylinders[i].Volume(); maxN = i; } return maxN; }
Використання методу GetMaxVolumeCylinder() в іншому методі
Cylinder[] cl; // посилання на масив класів типу Cylinder cl = new Cylinder[3]; // виділення пам'яті для 3 посилань на тип Cylinder // виділити пам'ять для кожного елементу масиву типу Cylinder for (int i = 0; i < cl.Length; i++) cl[i] = new Cylinder(); // cl[0].Set(2, 3.5); cl[1].Set(1.5, 2.8); cl[2].Set(3, 4.4); int num = GetMaxVolumeCylinder(cl); // num = 2
⇑
6. Приклад передачі одновимірного масиву зчислень у метод
Задана структура DayWeek, що визначає день тижня
// дні тижня enum DayWeek { Mon = 1, Tue, Wed, Thu, Fri, Sat, Sun }
Нижче реалізовано метод GetDayOff(), що отримує масив типу DayWeek як параметр. Метод визначає кількість вихідних днів (субота, неділя) у масиві DayWeek.
// метод визначає кількість вихідних у масиві mn static int GetDayOff(DayWeek[] mn) { int nDayOff = 0; for (int i=0; i<mn.Length; i++) { if (mn[i] == DayWeek.Sat) nDayOff++; if (mn[i] == DayWeek.Sun) nDayOff++; } return nDayOff; }
Демонстрація використання методу GetDayOff() з іншого програмного коду може бути такою:
// масив днів тижня типу DayWeek DayWeek[] dw = new DayWeek[5]; // заповнення масиву dw значеннями dw[0] = DayWeek.Sun; // вихідний dw[1] = DayWeek.Fri; dw[2] = DayWeek.Mon; dw[3] = DayWeek.Sat; // вихідний dw[4] = DayWeek.Tue; int nDayOff; nDayOff = GetDayOff(dw); // nDayOff = 2
⇑
7. Приклад передачі двовимірного масиву цілих (int) чисел у метод
У прикладі демонструється передача двовимірного масиву методу Sum(). В якості параметрів метод Sum() отримує:
- двовимірний масив цілих чисел з іменем mn;
- кількість рядків m у масиві;
- кількість стовпців n у масиві.
Метод знаходить суму елементів двовимірного масиву.
// метод отримує двовимірний масив цілих чисел // параметри m, n - кількість рядків та стовпців у масиві int Sum(int[,] mn, int m, int n) { int sum = 0; for (int i = 0; i < m; i++) for (int j = 0; j < n; j++) sum += mn[i,j]; return sum; }
Щоб коректно звертатись до елементів масиву, у метод потрібно передати кількість рядків m та стовпців n. Використання методу Sum() в іншому програмному коді
// оголошення масиву arr int[,] arr = new int[3, 4]; // заповнення масиву довільними значеннями for (int i = 0; i < 3; i++) for (int j = 0; j < 4; j++) arr[i, j] = i + j; // виклик методу Sum, якому передається масив arr int s = Sum(arr, 3, 4); // sum = 30
⇑
8. Приклад передачі двовимірного масиву класів у метод
Нехай задано клас, що реалізує колір та прозорість піксела на екрані. Оголошення класу має наступний вигляд
// клас, що реалізує колір та прозорість піксела на екрані class ColorPixel { int color; int transp; // прозорість у % // конструктори класу public ColorPixel() { color = transp = 0; } public ColorPixel(int _color, int _transp) { color = _color; transp = _transp; } // методи доступу public int GetColor() { return color; } public int GetTransp() { return transp; } public void Set(int _color, int _transp) { color = _color; transp = _transp; } }
Демонструється оголошення методу SetArrayColor(), який встановлює задани колір та прозорість у двовимірному масиві класів типу ColorPixel.
// встановити в масиві cp нові значення кольору та прозорості static void SetArrayColor(int m, int n, ColorPixel[,] cp, int _color, int _transp) { for (int i = 0; i < m; i++) for (int j = 0; j < n; j++) cp[i, j].Set(_color, _transp); return; }
Використання методу в іншому програмному коді може бути наступним
// створити новий масив класів ColorPixel int m = 3, n = 5; ColorPixel[,] CP = new ColorPixel[m, n]; // виділити пам'ять для масиву посилань // виділити пам'ять для кожного елементу масиву for (int i = 0; i < m; i++) for (int j = 0; j < n; j++) CP[i, j] = new ColorPixel(); // встановити конкретне значення кольору 5 та прозорості 50% у всі комірки масиву SetArrayColor(m, n, CP, 5, 50);
⇑
9. Приклад повернення одновимірного масиву цілих чисел (int) з методу
Демонструється метод, що повертає масив цілих чисел (int[]). Метод заповнює елементи масиву значеннями, що є квадратами позицій (індексів) масиву. Метод отримує вхідним параметром розмірність масиву n.
// метод, що генерує одновимірий масив цілих чисел // елементи масиву є квадрати позицій масиву static public int[] GetArray(int n) { int[] temp = new int[n]; // виділити пам'ять для масиву // заповнити масив значеннями for (int i = 0; i < n; i++) temp[i] = i * i; return temp; }
Виклик методу з іншого програмного коду може бути таким.
int[] A; // оголосити посилання на масив A A = GetArray(5); // A = { 0, 1, 4, 9, 16 }
⇑
10. Приклад повернення двовимірного масиву типу double з методу
Демонструється повернення двовимірного масиву з методу. Метод GetDoubleArray() отримує вхідним параметром розмірність масиву m*n. метод повертає масив.
// метод, що генерує двовимірний масив цілих чисел // розмір масиву m * n public double[,] GetDoubleArray(int m, int n) { // створити новий масив і виділити пам'ять для нього double[,] temp = new double[m, n]; // заповнення масиву значеннями for (int i = 0; i < m; i++) for (int j = 0; j < n; j++) temp[i, j] = j + i; return temp; }
Використання методу GetDoubleArray() в іншому програмному коді
double[,] D; D = GetDoubleArray(5, 6); double x; x = D[1, 3]; // x = 4.0 x = D[2, 5]; // x = 7.0 x = D[0, 0]; // x = 0.0
⇑
11. Приклад повернення двовимірного масиву класів з методу
Нехай задано клас, що реалізує символ типу char. У класі є внутрішня змінна, конструктор та методи, що визначають належність символу до тієї чи іншої категорії символів.
// клас, що демонструє символ class Char { char symbol; // внутрішня змінна // конструктор класу public Char(char _symbol) { symbol = _symbol; } // методи доступу public void Set(char _symbol) { symbol = _symbol; } public char Get() { return symbol; } // додаткові методи // визначає, чи символ типу Char є цифрою public bool IsNumber() { if ((symbol >= '0') && (symbol <= '9')) return true; return false; } // визначає, чи символ типу Char є буквою латинського алфавіту public bool IsLetter() { if ((symbol >= 'a') && (symbol <= 'z')) return true; if ((symbol >= 'A') && (symbol <= 'Z')) return true; return false; } // визначає, чи символ типу Char є пробілом public bool IsSpace() { return symbol == ' '; } }
Реалізація методу GetArrayChar(), що генерує (повертає) двовимірний масив об’єктів типу Char
// метод, що повертає двовимірний масив класів Char // метод генерує символи довільні символи // m, n - розмірність масиву static Char[,] GetArrayChar(int m, int n) { Char[,] tempArray = new Char[m, n]; // виділити пам'ять для масиву посилань типу Char int value; // сформувати масив termpArray for (int i=0; i<m; i++) for (int j=0; j<n; j++) { value = i + j; // значення, що буде заноситись в масив if (value > 255) value -= 255; // виділити пам'ять для елементу масиву + ініціалізувати значенням value tempArray[i, j] = new Char((char)value); } return tempArray; }
Демонстрація виклику методу GetArrayChar() з іншого програмного коду
// створити новий масив класів Char int m = 3, n = 5; Char[,] Array; // оголосити об'єкт типу двовимірний масив Char // викликати метод, що буде формувати масив Array Array = GetArrayChar(8, 9);
⇑
12. Приклад передачі двовимірного ступінчатого масиву у метод
У прикладі демонструється передача в метод та повернення з методу двовимірного ступінчатого масиву цілочисельних величин.
Метод CopyIntArray() отримує вхідними параметрами кількість рядків m у ступінчатому масиві A та сам ступінчатий масив A. Метод повертає такий самий ступінчатий масив B, який є копією масиву A. Ступінчатий масив B розміщується в іншій ділянці пам’яті
// метод, копіює вхідний ступінчатий масив в інший ступінчатий масив // m - кількість рядків в ступінчатому масиві // результат поміщається в інший масив, який розміщується в іншій ділянці пам'яті int[][] CopyIntArray(int m, int[][] A) { // оголосити інший масив int[][] B = new int[m][]; // виділити пам'ять для посилань на рядки масиву for (int i = 0; i < m; i++) { // виділити пам'ять для рядка з номером i B[i] = new int[A[i].Length]; // Array[i].Length - кількість елементів у рядку i for (int j = 0; j < A[i].Length; j++) B[i][j] = A[i][j]; } return B; }
Демонстрація використання методу CopyIntArray() для копіювання масивів наступна
// створити новий ступінчатий масив int m = 4; // к-сть рядків у масиві int[][] A = new int[4][]; // вихідний масив int[][] B; // результуючий масив // 1. Сформувати масив A // виділити пам'ять для масиву A A[0] = new int[5]; // у рядку 0 є 5 елементів A[1] = new int[3]; A[2] = new int[4]; A[3] = new int[2]; // записати в масив A довільні значення for (int i = 0; i < m; i++) for (int j = 0; j < A[i].Length; j++) A[i][j] = i + j; // 2. Викликати метод, який копіює масив A в масив B B = CopyIntArray(m, A); // B <= A // 3. Вивести на екран масив B for (int i = 0; i < m; i++) { Console.Write("B[{0}] = ", i); for (int j = 0; j < B[i].Length; j++) Console.Write("{0} ", B[i][j]); Console.WriteLine(" "); }
У результаті виконання вищенаведеного коду, на екран буде виведено такий результат
B[0] = 0 1 2 3 4 B[1] = 1 2 3 B[2] = 2 3 4 5 B[3] = 3 4 Press any key to continue . . .
⇑
Зв’язані теми
- Передача параметрів у метод. Аргументи і формальні параметри. Приклади. Передача посилання на об’єкт класу в метод
- Модифікатори параметрів ref і out. Приклади. Відмінності між модифікаторами ref і out
- Змінна кількість аргументів у методах. Модифікатор params. Переваги. Приклади методів зі змінною кількістю аргументів
- Необов’язкові аргументи. Переваги. Приклади застосування необов’язкових аргументів. Неоднозначність в необов’язкових аргументах
- Іменовані аргументи. Переваги використання. Приклади