| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > .NET для новичков > Цикл For |
| Автор: Lion_Smith 16.7.2008, 11:38 | ||
Есть вот такой цикл:
А что мне сделать что бы переменная i была типа float, а переменная j типа int?? Или все инициализаторы в цикле For должны непременно быть одного типа? А если я например хочу использовать в качестве счётчиков две переменные разного типа int и string? |
| Автор: MasterOfCode 16.7.2008, 11:41 |
| Что мешает непосредственно в теле цикла опреировать переменно типа float... |
| Автор: Lion_Smith 16.7.2008, 11:46 |
| Ни чего! |
| Автор: QryStaL 16.7.2008, 11:46 | ||
|
| Автор: Ram1reS 16.7.2008, 11:47 | ||||||||
Хмм... видимо Вы неправильно понимаете как работает цикл For.
т.е. можете оперировать чем угодно и как угодно, например:
|
| Автор: Lion_Smith 16.7.2008, 11:58 | ||||||||
Хм..
здесь в качестве инициализатора используется одна переменная типа string, а если я хочу использовать 2 переменные? Например одну s типа стринг, а другую i типа int?? Как их инициализировать в инициализаторе?? Такой код не подходит:
В данном случае переменная j не умрёт после того как цикл будет закончен, а нужно чтоб умерла. Кроме того при компиляции выдало ошибку: Error 1 A local variable named 'j' cannot be declared in this scope because it would give a different meaning to 'j', which is already used in a 'child' scope to denote something else C:\Documents and Settings\Rkuznetsov\My Documents\Visual Studio 2008\Projects\WindowsFormsApplication1\WindowsFormsApplication1\Form1.cs 95 23 WindowsFormsApplication1 |
| Автор: Ram1reS 16.7.2008, 13:02 | ||
Вот вырезка из спецификации C# (8.8.3)
Соответвтенно объявить вы можете только одну переменную, а вот инициализировать уже объявленные сколько угодно через запятую. |
| Автор: Lion_Smith 17.7.2008, 10:01 | ||||||||||||
| Спецификация дело хорошее! А на практике я имею примерно следующее! Вот синтаксис цикла for:
Cколько раз будет выполнено тело этого цикла зависит от трех управляющих элементов, заданных в скобках: 1) Инициализаторы задают начальное значение одной или нескольких переменных, часто называемых счетчиками или просто переменными цикла. 2) Условие задает условие окончания цикла. Результатом вычисления условия должно быть значение true или false. Условие вычисляется на каждой итерации цикла. Если условие цикла истинно, то выполняется тело цикла, т.е. оператор. Как только условие становится ложным, цикл завершает свою работу. 3) После того как выполненно тело цикла, изменяются значения счетчиков и снова проверяется условие. Значения счётчиков (инициализаторов) изменяются в списке выражений, которые записываются через запятую. С условием всё ясно. Это любое логическое выражение, оно одно его значения true или false. Со списком вырожений тоже всё понятно. Это просто блок выражений которые изменяют значения переменных, причём в этом блоке можно на ряду с инициализаторами использовать и ранее объявленные и инициализированные в коде переменные. Например:
Из этого же примера видно, что значение счётчиков можно свободно использовать и в теле цикла. Теперь обратим внимание на счётчики (инициализаторы). Это как минимум одна переменная любого типа срок жизни которой ограничен циклом. Тоесть переменная-инициализатор уничтожается как только цикл перестаёт работать, её значение теряется и показанный ниже код выдаст нам ошибку ещё на этапе компиляции, потому что к моменту str=k, переменая k уже будет уничтожена. В этом и есть прелесть использования инициализаторов.
Стоит отметить что иницализатор вовсе не обязательно вообще где бы то ни было использовать. Здесь мы создаём счётчик, но не где его не используем, по этому инициализировать, тоесть присваивать ему значение вовсе не обязательно:
а если не создавать счётчик, а попытаться использовать уже существующую переменную str, то нам опять выдаст ошибку компиляции. Счётчиков может быть несколько, тогда их можно перечислить через запятую.
Все эти переменные создаются и существуют внутри цикла и у всех у них один тип. В данном случае это тип int. Нельзя задать в качестве инициализаторов цикла две и более разнотипных переменых!!! Нельзя использовать в качестве инициализатора уже существующую переменную. Нельзя задать в области инициализации значение кукой-нибудь существующей переменной. Такой код выдаст ошибку:
За то, раз переменная k является инициализаторорм цикла, то мы можем использовать её вновь и вновь в нескольких циклах нашего кода подряд, всё равно по окончани каждого из этих циклов она будет уничтожена. PS: это конечно всем известно, так что сорри за мой маленький |
| Автор: oleeg 17.7.2008, 12:43 |
| Так в чем проблема, можно использовать 2 цикла. |