Andrewpeter Ответов: 5

Как заменить "пока" на цикл "для" петли?


Я хочу заменить цикл "while" циклом "for" В C#, как это сделать? Спасибо.
Например:
do
{
     // Do here
} while (condition);


преобразовать его в цикл "for"????

5 Ответов

Рейтинг:
36

Alan N

Это всего лишь соглашение о том, что цикл for должен повторяться фиксированное число раз, и его можно рассматривать как очень универсальный оператор цикла общего назначения. Вероятно, лучше всего придерживаться Конвенции в большинстве случаев, иначе код может стать трудным для понимания или, другими словами, легко неправильно понять.

Во всяком случае, вот два примера, показывающие эквиваленты for и do while, ни один из которых не имеет типичных операторов взаимодействия i++.

Этот пример заканчивается, когда генератор случайных чисел дает нам 8.

private static void DoWhileSimulation() {
  // Use a known seed for Random so that the sequence can be reproduced
  const Int32 Seed = 0;

  Console.WriteLine("For");
  Random rnd = new Random(Seed);
  for (Int32 i = 0; i != 8; i = rnd.Next(0, 13)) {
    Console.WriteLine(i);
  }
  Console.WriteLine();

  Console.WriteLine("Do While");
  // Set Random to generate the same sequence
  rnd = new Random(Seed);
  Int32 j = 0;
  do {
    Console.WriteLine(j);
    j = rnd.Next(0, 13);
  } while (j != 8);
  Console.WriteLine();
}


В этом случае мы делаем цикл на фиксированную продолжительность
private static void TimeLoop() {
  // Loop for 5 seconds
  Console.WriteLine("For Time");
  for (DateTime nowf = DateTime.Now, endTimef = nowf.AddSeconds(5); nowf < endTimef; nowf = DateTime.Now) {
    Console.WriteLine(nowf.ToLongTimeString());
    System.Threading.Thread.Sleep(1000);
  }

  Console.WriteLine("Do While Time");
  DateTime noww = DateTime.Now, endTimew = noww.AddSeconds(5);
  do {
    Console.WriteLine(noww.ToLongTimeString());
    System.Threading.Thread.Sleep(1000);
    noww = DateTime.Now;
  } while (noww < endTimew);
}

Алан.


lukeer

Имейте 5 для подчеркивания католицизма "за".

Рейтинг:
29

Guirec

Вы можете заменить все циклы for, foreach или do/while циклами 'while', но обратное неверно...
циклы " for " зацикливаются на количественном количестве итераций : ваш пример (do/while) вполне может работать вечно, если условие выхода никогда не будет выполнено.

Так что без дальнейших подробностей о вашем состоянии тогда ответ таков : невозможно.


Andrewpeter

Большое спасибо за ваш ответ, я его понял.

Phil J Pearson

- ответ таков : невозможно."
Это просто неправильно! Конечно это возможно:

for (bool first = true; first || condition; first = false)
{
// делать все
}

lukeer

Я бы поднял голос, если бы мог. Имейте виртуальную 5 для сгибания синтаксиса по вашей воле.

Guirec

Порочное решение :)
Вы правы, что это делает свою работу, но я бы все равно не рассматривал это как жизнеспособный ответ : кроме того, если вы хотите появиться в Зале славы coding horror :)

Phil J Pearson

Однако было бы неразумно давать этот ответ в качестве домашнего задания, если вы его не понимаете!

Рейтинг:
23

Sarin VT

Вам нужно реализовать do..while loop с for loop правильно??

Итак, в цикле for, На первой итерации, каким бы ни было условие, необходимое для обработки блока кода.

Для этого что-то вроде,

for (int i=0; (i==0)?false:i<10; i++)
 {
     //operations
 }


зачем вам нужен for..loop? если у вас есть do..while в руке??


Рейтинг:
18

lukeer

Как сказал вам гирек Ле Барс, для циклов[^] АР предназначенный цикл для Счетного числа итераций, но это не значит, что они не могут быть использованы иначе. Следующий пример будет циклическим до тех пор, пока condition равняется true.

for(;condition;)
{
    Whatever();
}
В цикле for есть три параметра. В Примере опущены первое и последнее, и это хорошо компилируется.
[Править]исправлен параметр порядка[/правка]

Но Guirec Le Bars прав и по другой причине: цикл for проверяет состояние прежде чем войти в петлю. Если это не равно истинный, ни одна итерация не выполняется.

do{ }while() с другой стороны, выполните один раз и проверьте после этого, следует ли повторять или нет. Так что, несмотря на условие, которое не равно истинный, цикл выполняется один раз.


Рейтинг:
0

nawabprince

Это очень просто в c#, как c, c++ есть
for(int i=0;i<=условие;i++)

Спасибо
Принц Шарма


Andrewpeter

О, "условие" - это логическое выражение, можете ли вы сравнить целое число с логическим выражением?

Guirec

нет, вы не можете... этот ответ вводит в заблуждение