Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Массивы




Оператор ветвления

Здесь выполняется одна из альтернативных ветвей в зависимости от значения управляющего выражения:

switch (nValue)

{

case 1: case 2: case 3: case 4: case 5:

Console.WriteLine("Rabbit walk through the street");

break; // this line is necessary

}

switch (someString)

{

default:

break;

case null:

break;

case "leavetakings": // two cases for code

case "greetings":

goto default;

case "goodbye":

goto case "leavetakings";

case "error":

// int i = 5;

// if you uncomment previous line you should get

// "control cannot fall through from one case to another" error

case "next case":

throw new ApplicationException();

}

Отличительной возможностью C# является возможность ветвления по строкам и запрет на переход между блоками без явного на это указания (при компиляции выдается ошибка)

Есть возможность сопоставить одному блоку несколько значений (в примере - " leavetakings " и " greetings "). Есть возможность передать управление на другой блок (goto case x; goto default;).

В случае, если делается ветвление по переменной типа string, значение которой равно null, а соответствующий case отсутствует, будет выполняться ветвь default (если такая есть). null - вполне полноправное значение переменной типа string и NullPointerException оператором switch выбрасываться не будет.

Массивы имеют тип System.Array и не копируются при присваивании (т.е. это ссылки, а не значения). Массивы можно использовать в циклах foreach. Свойство Length содержит общее число элементов массива (по всем измерениям).

Одномерные массивы (векторы в C++).

Тип массива включает в себя информацию о базовом типом элементов, которые может содержать массив, и о размерности (количестве индексов) массива.

Одномерные массивы определяются так:

int[] arr = new int[100];

Здесь arr - имя массива, 100 - количество элементов в массиве, первый элемент - arr[0], последний arr[99].

Заполнить массив можно тремя способами:

int i = new int[2];

i[0] = 1;

i[1] = 2;

 

int[] i = new int[] {1,2};

int[] i = {1,2};

Используя класс System.Array можно сделать массив с произвольным значением индекс первого элемента.

Прямоугольные массивы (Такой конструкции нет в Java).

Двумерный массив 2 x 3:

int[,] squareArray1 = new int[2,3];

int[,] squareArray2 = {{1, 2, 3}, {4, 5, 6}};

 

for(i = 0; i < squareArray2.GetLength(0); i++)

{

for (j = 0; j < squareArray2.GetLength(1); j++)

{

Console.WriteLine(squareArray[i,j]);

}

}

Чтобы получить граничные индексы элементов в некотором измерении, нужно воспользоваться функциями GetUpperBound(int i) и GetLowerBound(int i), где i - номер измерения (считая с нуля). GetLength(int i) вернет количество элементов в некотором измерении.

Массивы из массивов (Jagged Arrays).

Они подходят для текстовых редакторов.

// memory allocation and object zeroing

int[][] jag1 = new int[2][];

jag1[0] = new int [4];

jag1[1] = new int [6];

for (int i = 0; i < jag1.GetLength(0); i++)

{

for (int j = 0; j < jag1[h].GetLength(0); j++)

{

Console.WriteLine(jag1[i][j]);

}

}

 

// creating an initialized array

int[][] jag2 = new int[][]

{

new int[] {1, 2, 3, 4},

new int[] {5, 6, 7, 8, 9, 10}

};

for (int i = 0; i < jag2.Length; i++)

{

for (int j = 0; j < jag2[h].Length; j++)

{

Console.WriteLine(jag2[i][j]);

}

}

Indexer'ы

Индексаторы (как бы их по-русски поудачнее назвать?) могут пригодиться если нужно:

1. сделать разреженный массив;

2. хранить массив не в памяти, а, к примеру, на диске;

3. вычислять значения массива на лету и хранить только измененные значения

Синтаксис:

public double this[int i, int j]

{

set

{

MyCodeToStoreValue(i, j, value);

}

get

{

double res = MyMethodToRetrieveValue(i, j);

return res;

}

}

Здесь value - ключевое слово, которое обозначает значение




Поделиться с друзьями:


Дата добавления: 2015-07-02; Просмотров: 278; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.014 сек.