Я не буду показывать вам выход просто потому, что ваш вопрос не является то, что выход, но как цикл работает в for
.
Давайте сделаем это шаг за шагом. Вот некоторые псевдо-код:
for (init; condition; increment)
{
Console.Write("*");
}
- The
init
выполнен первый, и это делается только один раз, когда цикл встречается. Это верно только один раз для цикла for
.
- Оценка
condition
. Если это правда, тело выполняется. Таким образом выполняется Console.Write("*");
.
- Выполнено
increment
.
- Оценка
condition
оценивается снова. Если это правда, тело выполняется. Таким образом выполняется Console.Write("*");
.
Этапы 3 и 4 выполняются до тех пор, пока condition
не является ложным. После того, как он является ложным, цикл завершается, и выполняется следующая строка кода.
В вашем вопросе у вас есть цикл, и если условие истинно, он запускает другой цикл. Этот цикл начинается с 1, и если i
равно 0, его вычитают из 7, 7 - 0 равным 7, и поскольку j
равен 0 и меньше 7, он выполняет тело и печатает a *. Он продолжает делать шаги 3 и 4 и печатает * семь раз. Тогда условие ложно, поэтому он перескакивает за пределы внутреннего цикла и печатает новую строку.
Затем шаги 3 и 4 выполняются для внешнего контура.
Он продолжает делать это до тех пор, пока условие во внешнем цикле не станет равно false.
Затем он выполнит 'j ++' и снова выполнит тест 'j <= 7-i' и напечатает звезду до тех пор, пока это условие не станет ложным. Затем он напишет новую строку и выполнит «i ++» и проверит условие «i <= 6», а затем запустит внутренний цикл столько раз, сколько необходимо, и так далее. – juharr
Замечание: убедитесь, что вы понимаете разницу между «компиляцией» и «исполнением/запуском», поскольку пост потенциально смешивает эти два. –
Почему бы просто не использовать отладчик для выполнения кода, чтобы увидеть, что именно он делает? (И код ничего не делает, когда он компилируется, за исключением компиляции, вы должны * выполнить * его, прежде чем он сможет что-либо сделать. Разница очень важна для понимания.) –