Студопедия

Главная страница Случайная страница

Разделы сайта

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






Приклад роботи з статичними масивами






public void TestDeclaration(){ //оголошуються три одномірних масива A, B, C int[] A = new int[5], B= new int[5], C= new int[5]; Arrs.CreateOneDimAr(A); Arrs.CreateOneDimAr(B); for(int i = 0; i< 5; i++) C[i] = A[i] + B[i]; //оголошення масиву з явною ініціалізацією int[] x ={5, 5, 6, 6, 7, 7}; //оголошення масивів з відкладеною ініціалізацією int[] u, v; u = new int[3]; for(int i=0; i< 3; i++) u[i] =i+1; //v= {1, 2, 3}; //присвоювання константного масиву //неприпустимо v = new int[4]; v=u; //припустиме присвоювання int [, ] w = new int[3, 5]; //v=w; //неприпустиме присвоювання: об'єкти різних класів Arrs.PrintAr1(" A", A); Arrs.PrintAr1(" B", B); Arrs.PrintAr1(" C", C); Arrs.PrintAr1(" X", x); Arrs.PrintAr1(" U", u); Arrs.PrintAr1(" V", v); }

На що варто звернути увагу, аналізуючи цей текст:

· У процедурі показані різні способи оголошення масивів. Спочатку оголошуються одномірні масиви A, B й C, створювані конструктором. Значення елементів цих трьох масивів мають той самий тип int. Те, що вони мають однакове число елементів, відбулося з волі програміста, а не диктувалося вимогами мови. Помітьте, що після такого оголошення з ініціалізацією конструктором, всі елементи мають значення, у цьому випадку - нуль, і можуть брати участь в обчисленнях.

· Массив x оголошений з явною ініціалізацією. Число й значення його елементів визначається константним масивом.

· Масиви u й v оголошені з відкладеною ініціалізацією. У наступних операторах масив u ініціалізується в об'єктному стилі - елементи одержують його в циклі значення.

· Зверніть увагу на закоментованний оператор присвоювання. На відміну від ініціалізації, використати константний масив у правій частині оператора присвоювання неприпустимо. Ця спроба приводить до помилки, оскільки v - це посилання, який можна привласнити посилання, але не можна привласнити константний масив. Посилання привласнити можна. Що відбувається в операторі присвоювання v = u? Це коректне посилальне присвоювання: хоча u й v мають різне число елементів, але вони є об'єктами одного класу. У результаті присвоювання пам'ять, відведена масиву v, звільниться, нею займеться тепер збирач сміття. Обидві посилання u й v будуть тепер указувати на той самий масив, так що зміна елемента одного масиву негайно відіб'ється на іншому масиві.

· Далі визначається двовимірний масив w і робиться спроба виконати оператор присвоювання v=w. Це посилальне присвоювання некоректно, оскільки об'єкти w й v - різних класів і для них не виконується необхідне для присвоювання узгодження по типу.

· Для підтримки роботи з масивами створений спеціальний клас Array, статичні методи якого виконують різні операції над масивами. Зокрема, у прикладі використані два методи цього класу, один із яких заповнює масив випадковими числами, другий - виводить масив на печать. Ось текст першого із цих методів:

public static void CreateOneDimAr(int[] A){ for(int i = 0; i< A.GetLength(0); i++) A[i] = rnd.Next(1, 100); }//CreateOneDimAr

Тут rnd - це статичне поле класу Array, оголошене в такий спосіб:

private static Random rnd = new Random();

Процедура печатки масиву з ім'ям name виглядає так:

public static void PrintAr1(string name, int[] A){ Console.WriteLine(name); for(int i = 0; i< A.GetLength(0); i++) Console.Write(" \t" + name + " [{0}]={1}", i, A[i]); Console.WriteLine(); }//PrintAr1

На рис. 11.1 показаний консольний вивід результатів роботи процедури TestDeclarations.


Рис. 11.1. Результати оголошення й створення масивів

Особливу увагу звернете на вивід, пов'язаний з масивами u й v.






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.