Пришлось открыть правильный код, не могу самостоятельно понять решение данной задачи.
Понимаю как выполняется цикл, но как только цикл в цикле, я всё не пойму откуда что берется, посмотреть видео на ютубе, там всё поверхностно, может кто сможет поставить комментарии откуда что берется или где почитать более подробно про циклы и как правильно написать код.
public class Solution {
public static void main(String[] args) {
int height = 1;
while (height <= 10) {
int width = 1;
while (width <= 20) {
if (height == 1 || height == 10) {
System.out.print('Б');
} else if (width == 1 || width == 20) {
System.out.print('Б');
} else {
System.out.print(' ');
}
width++;
}
System.out.println();
height++;
}
}
}
Enot
4 уровень
Объясните пожалуйста код
Решен
Комментарии (6)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Oleg
12 марта 2021, 19:01
"Итого при первом прохождении цикла я по сути должен иметь следующий вид:
ББ"
Ты прогоняешь сразу 2 цикла поэтому тебе и кажется что у тебя получится ББ.
По факту у тебя запускается 1 цикл, где у тебя High = 1 и меньше 10 что является истинной, поэтому мы идем дальше к внутреннему (второму) циклу где мы вводим переменную width которая = 1 и она меньше 20, что так же является истинной. Заходим теперь в тело 2 цикла где у нас первое условие if будет равно true т.к. high у нас ровно 1 и печатается первая буква "Б". Т.к условие истинно переходим в конец 2 цикла где нас стоит width++. Возвращаемся в начало 2 цикла, и у нас по прежнему high = 1, поэтому у нас снова 1 условие if является true и печатается следующая буква "Б", после чего опять переходим в конец этого цикла и снова width++ и снова в начало 2 цикла ))) и так пока у нас width не будет равна 20 и мы не перейдем снова к первому циклу с увеличенным значением )))
Попытался максимально разжевать как мог ) я не мастер слов, так что надеюсь кому то будет понятно.
+3
Enot
12 марта 2021, 06:40
Спасибо за советы. Разными способами попробовал решить, по сути моё решение получилось почти таким же, но мне стало понятнее когда сделал так
public class Solution {
public static void main(String[] args) {
int n = 0;
while (n < 10)
{
int a = 0;
while (a < 20) {
if (a == 0 || a == 19) {
System.out.print("Б");
}
else if (n == 0 || n == 9){
System.out.print("Б");
}
else if (n > 0 || n < 9){
System.out.print(" ");
}
a++;
}
System.out.println();
n++;
}
}
}
0
Smørrebrød
16 марта 2021, 18:01
мне тоже кстаи ка кто так легче понятней
0
hidden #2322530
11 марта 2021, 12:44полезный
распиши на бумаге перед собой последовательность действий. глядишь поможет
+1
Enot
11 марта 2021, 16:22
public class Main {
public static void main(String[] args) {
int height = 1; // присвоили высоте значение 1
while (height <= 10) { // начали цикл высота <= 10
int width = 1; //аналогично с шириной
while (width <= 20) { // только <=20 так как 20 букв надо будет выводить в ширину и на этом будет стоп
if (height == 1 || height == 10) { //если высота равно 1 или равно 10 (а в самом начале мы ей задали 1
// значит подаставляем 1
System.out.print('Б'); // соответственно выводим Б
} else if (width == 1 || width == 20) { //тут тоже самое выводим Б
System.out.print('Б');
}
else { //иначе в обоих случаях пишем пробел
System.out.print(' ');
}
width++; // всегда в конце цикла добавляем +1 к ширине
}
System.out.println(); // всегда переносим курсор
height++; // и прибавляем +1 к высоте
}
}
}
Итого при первом прохождении цикла я по сути должен иметь следующий вид:
ББ
при прохождении второго на строчке ниже "печатем пробел". А по итогу картина в программе другая, я вот и не могу понять как цикл идёт :(
0
Ордынский Николай
12 марта 2021, 02:55решение
Приветствую, у тебя ошибка в твоем представлении в какой последовательности должны работать циклы while.
Первый цикл начинается с 1 строки, в нем есть второй цикл, но пока второй цикл полностью не выполнит свои условия, не закончится первая итерация первого цикла, а именно перевод на новую строку println и ++. Тоесть пока не выведутся все символы в строке, а у тебя от 1 до 20, не будет перехода на новую строку.
+2