While — сначала проверь, потом сделай, и так по кругу.
Do — сначала сделай, потом проверь, и так по кругу.
Отличаются они только случаем, когда условие не выполняется: while не пройдёт, а do пройдёт один раз.
// Пример 1.
// верно
while (впереди свободно) шаг;
// неверно — можно врезаться в препятствие, если нельзя сделать ни шагу
do шаг while (впереди свободно);
// Пример 2.
// Неверно — пока у вас в руках нет рубашки, условие цикла некорректно
while (рубашка грязная) возьми рубашку;
// верно
do возьми рубашку; while (рубашка грязная);
Циклы for, foreach и прочие — это разновидность цикла while (не do!!), сделанная для специального сценария: пройти некий набор объектов.