Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
7 / 6 / 3
Регистрация: 03.12.2020
Сообщений: 301

Как прервать несколько (вложенных) циклов For

24.09.2024, 11:04. Показов 791. Ответов 14
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть несколько циклов поиска размещенных один-в-другом... Как одной командой выполнить выход из "ВСЕХ" циклов в основной поток саба? Команда Exit For возвращает в цикл на уровень выше. Хотелось бы без Goto и Exit Sub...
Пример кода с вложенными циклами:
VB.NET Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Imports Google.Apis.Drive.v3
Imports Google.Apis.Sheets.v4
 
    Public gdGoo As Google.Apis.Drive.v3.DriveService ' диск гугля
    Public gGooShSer As Google.Apis.Sheets.v4.SheetsService ' таблица гугля
    Public gSheet As Google.Apis.Sheets.v4.Data.Sheet ' таблица гугля
    Public gResult ' полученный ресурс от google drive
 
Sub
    gResult = ResultGoogleD("mimeType = """ & "application/vnd.google-apps.folder" & """" & "and" & "name = """ & "..." & """", grF)
    For Each file As Google.Apis.Drive.v3.Data.File In gResult.Files
         Dim sheetRequestP = gGooShSer.Spreadsheets.[Get](file.Id)
         Dim sheetResponseP = sheetRequestP.Execute()
         For Each oSheetP In sheetResponseP.Sheets
                  If oSheetP.Properties.Title = "2222" Then
                          Exit For ' ___________ тут нужно выполнить выход из всех циклов в основной потока Саба!
                  End If
         Next
    Next
 ' нужно выйти сюда из всех циклов
P.S. прошу прощения, код утрирован и не содержит разъяснения для всех переменных, но как мне кажется, должен быть понятен для поставленного вопроса...
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
24.09.2024, 11:04
Ответы с готовыми решениями:

Несколько вложенных циклов для выборки из базы
с датой кое как вроде разобрался:) тут же возник новый вопрос выбираю данные из базы, к примеру есть поле1 и поле 2 таблицы1 и...

Как сделать n количество вложенных циклов for
Здравствуйте! Можете помочь? Как сделать n-количество вложенных циклов for с помощью указателей или каким-нибудь другим способом на...

Как выходить из нескольких вложенных циклов?
Столкнулся с ситуацией что нужно выходить из нескольких циклов при определенных условиях. Тут только go to ?

14
Эксперт .NET
 Аватар для Rius
11422 / 7302 / 1617
Регистрация: 25.05.2015
Сообщений: 22,072
Записей в блоге: 14
24.09.2024, 11:27
Лучший ответ Сообщение было отмечено filat18 как решение

Решение

Оформить в функцию и вернуться из нее.
2
7 / 6 / 3
Регистрация: 03.12.2020
Сообщений: 301
24.09.2024, 12:11  [ТС]
Даже не понимаю, как сам до этого не дошел!
0
 Аватар для Mikle Quits
732 / 251 / 14
Регистрация: 21.01.2023
Сообщений: 352
24.09.2024, 12:26
Ещё можно, чтобы не выделять код в процедуру, заключить циклы в конструкцию Do...Loop While False и выйти по Exit Do.
Оформление в отдельную процедуру ведёт к потере видимости всех локальных переменных, что не всегда удобно.
0
7 / 6 / 3
Регистрация: 03.12.2020
Сообщений: 301
24.09.2024, 12:32  [ТС]
Цитата Сообщение от Mikle Quits Посмотреть сообщение
Do...Loop While False и выйти по Exit Do
Тут видимо, стоит уточнить, что если в цикле не случится - выхода, то Exit Do должно быть прописано после циклов
0
 Аватар для Mikle Quits
732 / 251 / 14
Регистрация: 21.01.2023
Сообщений: 352
24.09.2024, 12:37
Цитата Сообщение от filat18 Посмотреть сообщение
если в цикле не случится - выхода, то Exit Do должно быть прописано после циклов
Не нужно, там для этого Loop While False, а не просто Loop.
0
1544 / 1507 / 324
Регистрация: 03.10.2012
Сообщений: 1,542
25.09.2024, 11:34
Цитата Сообщение от Mikle Quits Посмотреть сообщение
Оформление в отдельную процедуру ведёт к потере видимости всех локальных переменных, что не всегда удобно.
Что мешает передать их в функцию в качестве аргументов.
0
 Аватар для Mikle Quits
732 / 251 / 14
Регистрация: 21.01.2023
Сообщений: 352
25.09.2024, 15:54
Цитата Сообщение от MrCrown Посмотреть сообщение
Что мешает передать их в функцию в качестве аргументов.
Ничего не мешает, только обвешиваемся кучей лишних сущностей. Do...Loop While False лучше.
1
148 / 70 / 12
Регистрация: 11.02.2017
Сообщений: 310
25.09.2024, 16:02
filat18, Воспользоваться булевой переменной в каждом цикле
VB.NET Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Dim f As Boolean = False
For i = 0 To 10000
    If f Then Exit For
    For j = 0 To 10000
        If f Then Exit For
        For k = 0 To 10000
            'If f Then Exit For
            If j = 2 Then
                f = True
                Exit For
            End If
        Next
    Next
Next
0
7 / 6 / 3
Регистрация: 03.12.2020
Сообщений: 301
26.09.2024, 12:01  [ТС]
Hell666, идея не плоха, но не совместима с For Each!
0
148 / 70 / 12
Регистрация: 11.02.2017
Сообщений: 310
26.09.2024, 17:18
filat18, Чем несовместима?
VB.NET Скопировано
1
2
3
4
5
6
7
8
9
10
Dim f As Boolean = False
For Each file As Google.Apis.Drive.v3.Data.File In gResult.Files
    If f Then Exit For
         For Each oSheetP In sheetResponseP.Sheets
                  If oSheetP.Properties.Title = "2222" Then
                          f = True
                          Exit For
                  End If
         Next
    Next
0
148 / 70 / 12
Регистрация: 11.02.2017
Сообщений: 310
26.09.2024, 18:08
filat18,
VB.NET Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
Public Class Form1
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim lst1 As New List(Of Integer)
        Dim lst2 As New List(Of Integer)
        Dim lst3 As New List(Of Integer)
        Dim f As Boolean = False
        For i = 0 To 6000
            lst1.Add(i)
            lst2.Add(i)
            lst3.Add(i)
        Next
        For Each itm1 In lst1
            Application.DoEvents()
            If f Then Exit For
            TextBox1.Text = itm1
            For Each itm2 In lst2
                Application.DoEvents()
                If f Then Exit For
                TextBox2.Text = itm2
                For Each itm3 In lst3
                    Application.DoEvents()
                    If itm2 = 3 Then
                        f = True
                        Exit For
                    End If
                    TextBox3.Text = itm3
                Next
            Next
        Next
    End Sub
End Class
И циклы можно прерывать выборочно, а не все.
Миниатюры
Как прервать несколько (вложенных) циклов For  
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
17898 / 13994 / 5345
Регистрация: 17.03.2014
Сообщений: 28,652
Записей в блоге: 1
26.09.2024, 18:23
Цитата Сообщение от filat18 Посмотреть сообщение
Хотелось бы без Goto
А зря. GOTO здесь лучше всех подходит.
2
82 / 72 / 15
Регистрация: 18.01.2014
Сообщений: 349
27.09.2024, 21:19
Цитата Сообщение от OwenGlendower Посмотреть сообщение
А зря. GOTO здесь лучше всех подходит.
Ого!
Т.е. Вы хотите сказать, что тот самый GoTo, который был спасением для школьников в написании первых программ на каком-нибудь Правец 8А или БК и т.п. Тот самый GoTo, который был чуть ли не официально запрещен в институте и дальше при изучении ООП, теперь оказывается можно применять !!??? )))))
0
148 / 70 / 12
Регистрация: 11.02.2017
Сообщений: 310
27.09.2024, 21:33
_Radik_,
Ого!
Т.е. Вы хотите сказать, что тот самый GoTo, который был спасением для школьников в написании первых программ на каком-нибудь Правец 8А или БК и т.п. Тот самый GoTo, который был чуть ли не официально запрещен в институте и дальше при изучении ООП, теперь оказывается можно применять !!??? )))))
Начитался умных книжек лохматых годов? Или наслушался советчиков с седыми мудями? ))))
https://stackoverflow.com/ques... -in-vb-net
Я опубликовал фрагмент кода на другом форуме с просьбой о помощи, и люди указали мне, что использование GoToоператоров — очень плохая практика программирования. Мне интересно: почему это плохо?
GOTO сами по себе не являются злом. Зло происходит от неправильного использования GOTO.
В целом, почти всегда есть решения лучше, чем использование GOTO, но бывают случаи, когда GOTO — это правильный способ сделать это
That being said, you are a beginner, so you shouldn't be allowed to judge if GOTO is proper or not (because it hardly ever is) for a few more years.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
27.09.2024, 21:33
Помогаю со студенческими работами здесь

Как корректно прервать цикл? (нюансы использования циклов, операторов ветвления и оператора break)
Здравствуйте! такая форма работает...цикл нормально прерывается for(double i=1; i<=10; i++){ if(i==8) break; ...

Как найти максимальное количество вложенных циклов в C#?
У меня такая задача, сам код не могу предоставить потому что затрудняюсь, в этом то и суть. Как найти максимальное количество вложенных...

Как сделать неизвестное количество вложенных циклов?
в программу будет вводиться n-ное число, это самое число циклов со счетчиком, т. е. for (t=1; t<=v; ++t) for (t=1; t<=v;...

Как реализовать рекурсией n вложенных циклов с определенным условием?
Здравствуйте! Не получается реализовать рекурсию для n вложенных циклов. Помогите пожалуйста, если это вообще возможно реализовать. ...

30 вложенных циклов
Добрый день! Помогите, пожалуйста! Решаю задачу. В ней у меня фигурируют 30 параметров. Например, нахожу их сумму (на самом деле нет, но...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Результаты исследования от команды MCM (март 2025 г.)
Programma_Boinc 07.04.2025
Результаты исследования от команды MCM (март 2025 г. ) В рамках наших текущих исследований мы продолжаем изучать гены, которые имеют наибольшую вероятность развития рака легких, выявленные в рамках. . .
Рекурсивные типы в Python
py-thonny 07.04.2025
Рекурсивные типы - это типы данных, которые определяются через самих себя или в сочетании с другими типами, которые в свою очередь ссылаются на исходный тип. В мире программирования такие структуры. . .
C++26: Объединение и конкатенация последовательностей и диапазонов в std::ranges
NullReferenced 07.04.2025
Работа с последовательностями данных – одна из фундаментальных задач, с которой сталкивается каждый разработчик. C++ прошел длинный путь в эволюции средств для манипуляции коллекциями – от. . .
Обмен данными в микросервисной архитектуре
ArchitectMsa 06.04.2025
Когда разработчики начинают погружаться в мир микросервисов, они часто сталкиваются с парадоксальным правилом: "два сервиса не должны делить один источник данных". Эта мантра звучит повсюду в. . .
PostgreSQL в Kubernetes: Автоматизация обслуживания с CNPG
Mr. Docker 06.04.2025
Администраторы баз данных сталкиваются с целым рядом проблем при обслуживании PostgreSQL в Kubernetes: как обеспечить правильную репликацию данных, как настроить автоматическое переключение при. . .
Async/await в TypeScript
run.dev 06.04.2025
Асинхронное программирование — это подход к разработке программного обеспечения, при котором операции выполняются независимо друг от друга. В отличие от синхронного выполнения, где каждая последующая. . .
Многопоточность в C#: Синхронизация потоков
UnmanagedCoder 06.04.2025
Многопоточное программирование стало неотъемлемой частью разработки современных приложений на C#. С появлением многоядерных процессоров возможность выполнять несколько задач параллельно значительно. . .
TypeScript: Классы и конструкторы
run.dev 06.04.2025
TypeScript, как статически типизированный язык, построенный на основе JavaScript, привнес в веб-разработку новый уровень надежности и структурированности кода. Одним из важнейших элементов этой. . .
Многопоточное программирование: Rust против C++
golander 06.04.2025
C++ существует уже несколько десятилетий и его поддержка параллелизма постепенно наращивалась со временем. Начиная с C++11, язык получил стандартную библиотеку для работы с потоками, а в последующих. . .
std::vector в C++: от основ к оптимизации производительности
NullReferenced 05.04.2025
Для многих программистов знакомство с std::vector происходит на ранних этапах изучения языка, но между базовым пониманием и подлинным мастерством лежит огромная дистанция. Контейнер std::vector. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
Выделить код Копировать код Сохранить код Нормальный размер Увеличенный размер