Шаг 67.
Язык программирования C#. Начала
Статические методы. Массив как аргумент метода

    На этом шаге мы рассмотрим передачу массива в метод.

    Аргументами методам можно передавать практически все, что угодно. Среди этого "всего" есть и массивы. Другими словами, аргументом методу можно передать массив (одномерный, двумерный, многомерный). Чтобы понять, как это делается, следует вспомнить, как мы получаем доступ к массиву. Используется переменная массива то есть переменная, которая ссылается на массив и которую в большинстве случаев отождествляют с массивом. Поэтому, если у нас имеется массив, который следует передать аргументом методу, то сделать это можно, передав методу ссылку на массив. Этого будет вполне достаточно для того, чтобы метод получил доступ к массиву. Именно такой подход используется в С#.

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

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(); 
создается объект rnd класса Random, который используется в теле метода для генерации случайных чисел. Это происходит в конструкции цикла, в котором индексная переменная k перебирает индексы элементов массива, объявленного аргументом метода. Значение элементу присваивается командой
  nums[k] = rnd.Next(1, 101);
(случайное целое число в диапазоне значений от 1 до 100 включительно).

    Для отображения содержимого массивов описаны две версии метода showArray(). Одна версия предназначена для отображения содержимого одномерного массива, а другая версия метода предназначена для отображения содержимого двумерного целочисленного массива. Если аргументом методу showArray() передается одномерный массив (объявлен как int[] nums), то элементы массива отображаются в одной строке с использованием вертикальной черты в качестве разделителя.

    Если аргументом методу showArray() передается двумерный массив (аргумент объявлен как int[,] nums), то элементы массива отображаются в консольном окне построчно.

    Еще один метод, который называется findMin(), получает аргументом одномерный целочисленный массив, а результатом возвращает целочисленное значение, которое совпадает со значением наименьшего элемента в массиве. В теле метода объявляется локальная переменная s с начальным значением nums[0] (значение первого элемента массива, переданного аргументом методу). После этого запускается конструкция цикла, в котором перебираются все элемента массива, кроме начального, и если значение проверяемого элемента nums[k] меньше текущего значения переменной s (условие nums[k] < s в условной конструкции в теле цикла), то командой

  s = nums[k];
переменной s присваивается новое значение. В итоге после завершения цикла в переменную s будет записано значение наименьшего элемента в массиве. Командой
  return s;
значение переменной 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(В); 
объявляется переменная m, в кочестве значения которой присваивается результат вызова метода findMin() с аргументом В.

    На следующем шаге мы рассмотрим получение массива из метода.




Предыдущий шаг Содержание Следующий шаг