#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:015. Использование проверки диапазона
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