Переход к следующему "значению" цикла

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

ndemidov
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 285
Зарегистрирован: 14.11.2007 (Ср) 16:23
Откуда: Earth planet

Переход к следующему "значению" цикла

Сообщение ndemidov » 15.03.2008 (Сб) 14:00

Код: Выделить всё
For i = 0 to MAXLEN Step n
    If <особое условие> Then
   
    End if
    .........
Next i


Если <особое условие> равно TRUE, то нужно, чтобы дальше тело цикло не выполнялось, i увеличилась/уменьшилась на n и выполнилось тело цикла для следующего i (равного i +n). Exit For - не то. Спомощью какого VB (2005) оператора это сделать?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16489
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 15.03.2008 (Сб) 15:35

GoTo? Аналогов Continue здесь нет.

По идее, Вместо "Next i" должно быть "End For", а "Next i" должен делать как раз то, что тебе нужно.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

ndemidov
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 285
Зарегистрирован: 14.11.2007 (Ср) 16:23
Откуда: Earth planet

Сообщение ndemidov » 15.03.2008 (Сб) 16:00

Да, делаю сейчас посредством GoTo:

Код: Выделить всё

For i = 0 to MAXLEN Step n
    Label1:

    ..........
    ..........
    If <особое условие> Then
        ..........
        i += n
        GoTo Label1
    End if
    .........
    .........
Next i

Хакер писал(а): Аналогов Continue здесь нет.

Понял, спасибо.
Последний раз редактировалось ndemidov 15.03.2008 (Сб) 16:03, всего редактировалось 1 раз.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16489
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 15.03.2008 (Сб) 16:02

Делаешь ерунду полную.
Код: Выделить всё
For i = 0 to MAXLEN Step n
    ..........
    ..........
    If <особое условие> Then GoTo Label1
    .........
    .........
    Label1:
Next i
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

1Steps
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 505
Зарегистрирован: 20.12.2006 (Ср) 0:50
Откуда: New York

Сообщение 1Steps » 15.03.2008 (Сб) 16:59

Код: Выделить всё
For i = 0 to MAXLEN Step n

    If <особое условие> Then Continue For
    .........
    .........
Next i
Удалена за ненадобностью.

VVitafresh
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1641
Зарегистрирован: 12.05.2005 (Чт) 14:44
Откуда: Херсон, UA

Re: Переход к следующему "значению" цикла

Сообщение VVitafresh » 16.03.2008 (Вс) 1:39

ndemidov писал(а):
Код: Выделить всё
For i = 0 to MAXLEN Step n
    If <особое условие> Then
   
    End if
    .........
Next i


Если <особое условие> равно TRUE, то нужно, чтобы дальше тело цикло не выполнялось, i увеличилась/уменьшилась на n и выполнилось тело цикла для следующего i (равного i +n). Exit For - не то. Спомощью какого VB (2005) оператора это сделать?

А может лучше написать:
Код: Выделить всё
For i = 0 to MAXLEN Step n
    .........
    If NOT(<особое условие>) Then
        'Выполняем все что нужно если <особое условие> НЕ равно TRUE
    End if
Next i
Никакую проблему невозможно решить на том же уровне, на каком она возникла. Нужно стать выше этой проблемы, поднявшись на следующий уровень.

brigval
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 176
Зарегистрирован: 16.10.2005 (Вс) 12:37
Откуда: Подмосковье

Re: Переход к следующему "значению" цикла

Сообщение brigval » 16.03.2008 (Вс) 12:39

ndemidov писал(а):
Код: Выделить всё
For i = 0 to MAXLEN Step n
    If <особое условие> Then
   
    End if
    .........
Next i


Если <особое условие> равно TRUE, то нужно, чтобы дальше тело цикло не выполнялось, i увеличилась/уменьшилась на n и выполнилось тело цикла для следующего i (равного i +n). Exit For - не то. Спомощью какого VB (2005) оператора это сделать?


Если цикл должен продолжаться, то можно сделать так
Код: Выделить всё
For i = 0 to MAXLEN Step n
    If <особое условие> Then i = i + n
    .........
Next i


если только
выполнилось тело цикла для следующего i (равного i +n)

то можно так
Код: Выделить всё
Dim bExitFor As Boolean
For i = 0 to MAXLEN Step n
    If <особое условие> Then
       i = i + n
       bExitFor = True
    End if
    .........
    If bExitFor Then Exit For
Next i
brigval

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16489
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 16.03.2008 (Вс) 16:55

brigval
Ты что-то путаешь.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

ndemidov
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 285
Зарегистрирован: 14.11.2007 (Ср) 16:23
Откуда: Earth planet

Re: Переход к следующему "значению" цикла

Сообщение ndemidov » 16.03.2008 (Вс) 16:59

Хакер, 1Steps, Спасибо.
VVitafresh, Возмржно, лучше, но это ещё больше ухудшит читаемость (там и так много условных операторов).

brigval писал(а):Если цикл должен продолжаться, то можно сделать так
Код: Выделить всё
For i = 0 to MAXLEN Step n
    If <особое условие> Then i = i + n
    .........
Next i


Не получиться: до (и после) "особого условия" полно кода. А особое условие уничтожает объект, на который больше нельзя ссылаться.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16489
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 16.03.2008 (Вс) 17:02

ndemidov
Я склоняюсь к мнению, что brigval написал полную чушь.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

ndemidov
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 285
Зарегистрирован: 14.11.2007 (Ср) 16:23
Откуда: Earth planet

Сообщение ndemidov » 16.03.2008 (Вс) 17:09

В любом случае я [(плохо OR несовсем понятно) = TRUE] описал (как часто бывает :) ) описал задачу.

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 17.03.2008 (Пн) 7:59

ndemidov, вот как раз в VB2005 появился оператор Continue, конкретно в приминении к For это выглядит так:

Код: Выделить всё
For i As Integer = 0 To 10
    If i = 5 Then Continue For
    Console.WriteLine(i)
Next


Данный код напечатает числа от 0 до 10, за исключением 5.
Хакер, гм... низачот! :D
Весь мир матрица, а мы в нем потоки байтов!

brigval
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 176
Зарегистрирован: 16.10.2005 (Вс) 12:37
Откуда: Подмосковье

Сообщение brigval » 17.03.2008 (Пн) 8:58

С учетом последующих пояснений ndemidov мой пост, действительно, выглядит как чушь. Но, как ответ на первый вопрос темы, мой пост выглядит вполне прилично. :)
Удачи!
brigval


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 1

    TopList