Аватар пользователя Зиги зиги

Заметки C#

Выход из вложенного цикла(двойной цикл)

Имеем код

for (int i = 0; i < 10; i++)
{
   for (int j = 0; j < 10; j++)
   {
       if (i > 5 && j == 7)
       {
           //действия
          //выход из цикла
       }
   }
}

Использую break внутри второго цикла даст только выход из него

for (int i = 0; i < 10; i++)
{
   for (int j = 0; j < 10; j++)
   {
       if (i > 5 && j == 7)
       {
           //действия
          /*
            При такой конструкции мы будем выходить из внутреннего цикла (j), но внешний так и
            продолжит свою работу(i)
          */
          break;//выход из цикла
       }
   }
}

Для полного выхода из цикла есть несколько вариантов.
1) применить оператор goto

for (int i = 0; i < 10; i++)
{
   for (int j = 0; j < 10; j++)
   {
       if (i > 5 && j == 7)
       {
           //действия
          goto Found;//выход из цикла
       }
   }
}
Found:
    //едем дальше



2) Затолкать цикл в функции и использовать оператор return

public void Loop()
{
	for (int i = 0; i < 10; i++)
	{
		for (int j = 0; j < 10; j++)
		{
			if (i > 5 && j == 7)
			{
				//действия
				return;//выход из цикла
			}
		}
	}
}

3) Использование дополнительного флага для первого цикла

var flag = false;
for (int i = 0; i < 10; i++)
{
   for (int j = 0; j < 10; j++)
   {
       if (i > 5 && j == 7)
       {
           //действия
          //выход из цикла
          flag = true;
          break;
       }
   }
   if(flag == true) break;
}

4) Последний вариант. Присвоить i максимально возможное значение при первом выходе из цикла.

for (int i = 0; i < 10; i++)
{
   for (int j = 0; j < 10; j++)
   {
       if (i > 5 && j == 7)
       {
           //действия
          //выход из цикла
          i = Int32.MaxValue - 1;
          /*
          Это примерно тоже само что сделать 
          i = 1000000;
          */
       }
   }
}

Комментарии 0 2019-10-29 04:10:33 5