Нет понимания, как работают циклы
Может кто-то на каком-нибудь примере подробно расписать как работает это все ?и в каком порядке?
очень путаюсь в этом...
Заранее большое спасибо !
Дарья
2 уровень
Добрый день!добрые люди, помогите, пожалуйста, можете объяснить как все таки решается задача с незаполненым прямоугольником
Обсуждается
Комментарии (9)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
hidden #3303140
27 февраля 2024, 10:15
Делаешь вложенные циклы. Внешний отвечает за количество строк, внутренний за содержимое каждой отдельной строки. Во внутреннем делаешь проверку, проверяешь, если текущая строка или текущий столбец - первый (0) или последний (length - 1), то выводишь символ границы, иначе выводишь пробел. Во внешнем цикле переходишь к следующей строке.
0
Денис Enterprise Java Developer
27 февраля 2024, 11:11
На самом то деле можно и без вложенных циклов) просто сбилдить две строки "крышка" и "внутренность", да вывести в нужной очерёдности. Конечно же внутренняя часть должна выводиться в цикле.
0
ДарьяExpert
27 февраля 2024, 11:28
ничего не понятно, но очень интересно :DD
задача с заполненным прямоугольником, вот там есть понимание как это все работает
а вот с незаполненным треугольником пошла сплошная путаница, и в голове не укладывается решение.
А вообще можно как-то упустить эту тему и двигаться дальше?и потом если что вернутся
Или все же это ключевой момент который надо понять?
0
Денис Enterprise Java Developer
27 февраля 2024, 11:34
Это больше разминка для ума... ну т.е. задача на фактическое программирование. Тебе нужно придумать последовательность действий которая приведёт к желаемому результату - алгоритм стало быть.
Не спеши печатать код, возьми листик бумаги и порисуй. Подумай как бы ты рисовала такой прямоугольник, не забывай что двигаться ты можешь только горизонтально и вертикально. При том вертикально только вниз.
То что предложил аноним выше это один вариант решения, он будет работать, но в тоже время делает кучу ненужных проверок в коде. То что предложил я тоже решение, сформировать на основе вводных данных два строчных паттерна и вывести соответствующим образом. Может ты еще какой вариант придумаешь :)
0
ДарьяExpert
27 февраля 2024, 11:38
хорошо, спасибо 🤠
пойду насиловать свой никудышный мозг))
0
hidden #3303140
27 февраля 2024, 12:31
Так-то можно сразу и одну команду вывода с хардкодом написать и получить самое эффективное решение, только вот я не уверен что от нас хотят именно этого. Это Денису, если что, не Дарье.
А Дарье: представь, что ты ткнула в случайное место в прямоугольнике и получила координаты этой точки (i; j). Как определить, принадлежит ли эта точка границе прямоугольника или его "начинке"?
0
ДарьяExpert
27 февраля 2024, 12:51
вот честно, сижу и туплю
ничего на ум совершенно не приходит
видимо эту тему надо оставить. Первая тема где мне ничего на ум не приходит
0
Денис Enterprise Java Developer
27 февраля 2024, 13:15
Зачем же хардкодом :) Штука эта будет вполне динамическая. Типа
Как-то так.
0
ДарьяExpert
27 февраля 2024, 13:20
я все таки открыла готовое решение
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++;
}
}
}
поняла для себя такую логику работы, посмотрите, пожалуйста)ссори за сумбурность
так понимаю if (height == 1 || height == 10) проверяет условия и будет печать букву "Б" на 1 и потом на 10 строке и так 20 раз пока внутренний счетчик не отработает, после того как внутренний счетчик отработал, переменная
height увеличивается на единицу (становится 2) и выводится пустая строка System.out.println() и после этого снова система заходит во внутренний цикл, в условия первого ифа if (height == 1 || height == 10)мы уже не попадаем так как height стало равна двум после прохода через один полный цикл
следовательно проверяется условие else if (width == 1 || width == 20) {, видим, что width это цифра 1 (внутренний счетчик обнулился после прохода через полный цикл и стало снова единицей) выводим "Б "после прохода один раз через внутренний цикл внутренний счетчик меняется на 2, и по второму условию мы также уже не проходим, остаётся условие вывода else {
System.out.print(' '); пустой строки и так до 19 раз, после 19 раза также выводится Б по условию else if (width == 1 || width == 20) после этого выходим из внутреннего цикла увеличиваем переменную height также на единицу, и проходим весь тот же цикл до 9 строки (ведь мы попадаем только в условие else if (width == 1 || width == 20) в 10 строке мы уже будем попадать под первое условие внутреннего цикла
0