2012-04-21 3 views
2

Я была поставлена ​​задача в домашнее задание с преобразованием цикла в C# в Fortran 95.Маркированный разрыв/продолжение в C# или Fortran 95 петлях?

outerLoop: 
    for(row = 0; row < numRows; rows++){ 
    for(col = 0; col < numCols; col++){ 
     if(mat[row][col] == 0) 
     continue outerLoop; 
     sum += mat[row][col]; 
    } 
    } 

Как некоторые из вас могут увидеть, это выглядит так же спецификации этикетки выхода заявление, используемого в Java и Perl, которые, по моему мнению, используются для вырывания циклов, которые имеют вложенные циклы, или «, если», а не только один цикл/оператор. Я все еще новичок в этой функции на Java, поэтому я не уверен, существует ли она где-либо еще, в частности, в C# и Fortran 95.

Я искал Google, но я ничего не нашел для Это. У меня плохое время формулировка поисковых терминов для использования в Google, так что факторы в нем, а также.

Обратите внимание: я не ищу ответ на раздаточный материал; Я просто ищу, где найти ответ.

Спасибо, что нашли время, чтобы прочитать это сообщение.

+2

Я думаю, что вы ищете 'goto': http://msdn.microsoft.com/en-us/library/13940fs2.aspx – Gabe

+0

Я не знаю, что' continue outerLoop' делает точно, но если вы разместите «break» в этом месте, он сломает внутренний цикл и позволит продолжить цикл. – Cheeso

+1

Вы действительно хотите прочитать инструкции перехода в C# - http://msdn.microsoft.com/en-us/library/d96yfwee.aspx – RichardOD

ответ

1

Я считаю, что такая функция break x не поддерживается в C#. Вам нужно будет вырваться из вложенных циклов вручную с помощью флагов.

bool stop = false; 
for (row = 0; row < numRows; rows++) 
{ 
    for (col = 0; col < numCols; col++) 
    { 
     if (mat[row][col] == 0) 
     { 
      stop = true; 
      break; 
     } 

     sum += mat[row][col]; 
    } 

    if (stop) 
     break; 
} 

Упрощенные варианты включают goto заявление (которое широко одобряется); и инкапсулирование цикла в рамках выделенного метода, и в этом случае вы можете просто return, когда хотите остановить итерацию.

+0

Посмотрев на инструкцию перехода для C#, я пришел к выводу, что 1) «продолжать обозначать» для C# не существует, и 2) мой учитель определенно дал нам неправильный набор инструкций/кода для проблема, которая в конечном итоге приводит к неправильной ошибке. – Rxanadu

+0

@ user1170036: Из вашего примера я предполагаю, что ваш учитель ссылался на оператор [goto] (http://msdn.microsoft.com/en-us/library/13940fs2.aspx), который поддерживается на C#, но сильно не рекомендуется использовать, особенно в академических условиях, поскольку это противоречит принципам [структурированного программирования] (http://en.wikipedia.org/wiki/Structured_programming). – Douglas

+3

Как 'break' отличается от' goto'? То есть, почему 'break foo' будет хорошо, но' goto foo' будет обескуражен? – Gabe

3

Примеры конструкций управления контуром в Fortran 95 см. В моем примере кода в предыдущем вопросе Fortran, в котором используется пример «цикл» и «выход»: Reading comment lines correctly in an input file using Fortran 90,.

+0

Хотя я считаю, что goto имеет место, циклы именования лучше, чем использование goto в этом контексте. +1 – mgilson