На этом шаге мы рассмотрим передачу массива в метод.
Аргументами методам можно передавать практически все, что угодно. Среди этого "всего" есть и массивы. Другими словами, аргументом методу можно передать массив (одномерный, двумерный, многомерный). Чтобы понять, как это делается, следует вспомнить, как мы получаем доступ к массиву. Используется переменная массива то есть переменная, которая ссылается на массив и которую в большинстве случаев отождествляют с массивом. Поэтому, если у нас имеется массив, который следует передать аргументом методу, то сделать это можно, передав методу ссылку на массив. Этого будет вполне достаточно для того, чтобы метод получил доступ к массиву. Именно такой подход используется в С#.
С технической точки зрения, при передаче массива методу соответствующий аргумент описывается точно так же, как объявляется переменная массива соответствующего типа. Как данный подход используется на практике, проиллюстрировано в программе ниже.
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace pr67_1 { class Program { // Метод для заполнения массива случайными числами: static void fillRand(int[] nums) { // Объект для генерирования случайных чисел: Random rnd = new Random(); // Заполнение массива случайными числами: for(int k=0; k < nums.Length; k++){ nums[k] = rnd.Next(1,101); } } // Метод для отображения одномерного // целочисленного массива: static void showArray(int[] nums){ // Перебор элементов массива: for(int k=0; k < nums.Length; k++){ // Отображение значения элемента: Console.Write("| {0}", nums[k]); } Console. WriteLine("|"); } // Метод для отображения двумерного // целочисленного массиза: static void showArray(int[,] nums){ // Перебор строк в массиве: for (int i=0; i < nums.GetLength(0); i++){ // Перебор элементов в строке: for(int j=0; j < nums.GetLength(1); j++){ // Отображение значения элемента массива: Console.Write("{0,3}", nums[i, j]); } // Переход к новой строке: Console.WriteLine(); } } // Метод для вычисления наименьшего элемента в массиве: static int findMin(int[] nums){ // Локальная переменная: int s = nums[0]; // Поиск наименьшего значения: for(int k=1; k < nums.Length; k++){ // Если проверяемый элемент имеет значение, // меньшее текущего значения переменной s: if ( nums[k] < s ) s = nums[k]; } // Результат метода: return s; } // Главный метод программы: static void Main() { // Одномерные массивы: int[] A = {1, 3, 5, 7, 9, 11, 13, 15}; int[] B = new int[5]; // Двумерный массив: int[,] C = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}}; // Массив В заполняется случайными числами: fillRand(B); Console.WriteLine("Одномерный массив А:"); // Отображается массив А: showArray(A); Console.WriteLine("Одномерный массив В:"); // Отображается массив В: showArray(B); // Поиск наименьшего элемента: int m = findMin(B); Console.WriteLine("Наименьшее значение: {0}", m); Console.WriteLine("Двумерный массив С:"); // Отображается массив С: showArray(C); // Задержка: Console.ReadLine(); } } }
Результат выполнения программы такой (учтите, что используется генератор случайных чисел).
Рис.1. Результат работы приложения
В программе описан метод fillRand(), предназначенный для заполнения одномерного целочисленного массива случайными числами. Метод не возвращает результат, а аргумент метода объявлен инструкцией
int [] nums; ,
Random rnd = new Random();
nums[k] = rnd.Next(1, 101);
Для отображения содержимого массивов описаны две версии метода showArray(). Одна версия предназначена для отображения содержимого одномерного массива, а другая версия метода предназначена для отображения содержимого двумерного целочисленного массива. Если аргументом методу showArray() передается одномерный массив (объявлен как int[] nums), то элементы массива отображаются в одной строке с использованием вертикальной черты в качестве разделителя.
Если аргументом методу showArray() передается двумерный массив (аргумент объявлен как int[,] nums), то элементы массива отображаются в консольном окне построчно.
Еще один метод, который называется findMin(), получает аргументом одномерный целочисленный массив, а результатом возвращает целочисленное значение, которое совпадает со значением наименьшего элемента в массиве. В теле метода объявляется локальная переменная s с начальным значением nums[0] (значение первого элемента массива, переданного аргументом методу). После этого запускается конструкция цикла, в котором перебираются все элемента массива, кроме начального, и если значение проверяемого элемента nums[k] меньше текущего значения переменной s (условие nums[k] < s в условной конструкции в теле цикла), то командой
s = nums[k];
return s;
В главном методе программы командой
int[] А= {1, 3, 5, 7, 9, 11, 13, 15};
int[] B = new int [5];
fillRand(В); .
Командой
int [,] С = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}};
showArray(А); , showArray (В); и showArray (С); .
Также для массива В вычисляется наименьшее значение элемента. Для этой цели использован метод findMin(): командой
int m = findMin(В);
На следующем шаге мы рассмотрим получение массива из метода.