Как я могу увидеть, как часто мой цикл for делал» «, чтобы получить правильное значение?

#c# #loops

#c# #петли

Вопрос:

Я хочу посмотреть, как часто этот цикл добавлял B , чтобы получить этот результат. (Добавление B в это {0} не работает…

 int firsthousecase1 = 20; int thirdhousecase1 = 40;  for (int B = 0; B != firsthousecase1; B  )  {  value  = 1;  for (; B != thirdhousecase1; B  )  {  value  = 1;  Console.WriteLine("Case #{0}: {1}",); //Case #{0} should show me how many trys the console did to get the value from "value".   return;  }  }  

Комментарии:

1. Вы всегда можете использовать отладчик, поставить точку останова, пройти каждую итерацию цикла и самостоятельно наблюдать за изменением значений.

2. Учитывая, что B каждый раз добавляет 1, а B начинается с 0, количество раз, которое мы должны сделать , чтобы достичь 20, равно 20.. Количество добавлений, достигающих 40, равно 40.. Общая формула для количества уровней, которые вы должны увеличить на 1, чтобы достичь цели, такова targetNumber - startingNumber . Я что-то упускаю?

3. В стороне, это странный код, но полезный урок: избегайте использования != для ограничения действий в цикле; вместо этого используйте что-то подобное lt; по той простой причине, что если вы каким-то образом пропустите значение, которого вы ждете != , вы можете работать намного дольше, чем ожидалось. Здесь B равно 0, проверено, что оно не равно 20 (true), начинается цикл, затем начинается другой цикл, который, если return бы оператора не было, занял бы B до 40. Затем этот внутренний цикл остановится, внешний цикл увеличит B до 41, а затем внутренний цикл запустится снова, на этот раз разделив B на миллиарды..

4. Если вы используете lt; его, даже если вы пропустите свою цель, цикл остановится. Предположим, в смысле таймера, у вас есть поток, который просыпается каждую секунду и проверяет время. Если вам нужен будильник в 9 утра, и вы возлагаете свои надежды на то, что нить проснется в 8:59:58.. 8:59:59.. Вы можете удивиться, если из-за внезапного замедления ваш поток будет спать 2 секунды и проснется только в 9:00:01. Если вы ждали == 9:00:00 , то проспите еще один день, прежде чем вам снова выпадет шанс. Если бы вы использовали lt; «спать до 9 или позже», то ваш будильник зазвучал бы, хотя и с опозданием на секунду, в 9:00:01

5. Использование проверки диапазона lt; и т. Д. Может быть еще более важным для чисел с плавающей запятой, поскольку представления могут быть неточными. И чтобы ответить на вопрос, как я могу увидеть, как часто мой цикл for делал» «, чтобы получить правильное значение? — представленный код никогда не увеличивает B; это return происходит до того, как у него появится такая возможность. 3 оператора в a для for(do_once_before_loop; check_before_every_loop_and_only_loop_if_true; do_after_every_loop) — этот код никогда не завершает ни одно тело цикла, поэтому никогда не попадает в бит do_after_every_loop