Но я вообще не понимаю последовательность кода программы, я в уме думаю что она так будет читать код, а она читает по другому. Я пишу во внешнем цикле внутренний цикл и задаю ему условие. Допустим прямоугольник высотой a= 10 и шириной b=15 (я не помню условия уже), и вот я ей говорю если b==0 пиши букву Б, b++, иначе если b от 1 до 14 рисуй пробел, и снова иначе если b == 15 рисуй Б, закрываем цикл, и во внешнем пишу ему чтоб переносил на другую строку и по новой. и знаете что? а ничего она не понимает, я её не понимаю, а программа меня).
Arseny
7 уровень
Вот вы всем пишете элементарно всё
Обсуждается
Комментарии (17)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Arseny
2 апреля, 10:00
public class Main {
public static void main(String[] args) {
int a = 0;
while (a < 10) {
int b = 0;
while (b < 15) {
if (b == 0) {
System.out.print("B");
b++;
} else if (b > 0 && b < 15) {
System.out.print("*");
b++;
} else if (b == 15) {
System.out.print("B");
b++;
}
System.out.println();
a++;
}
}
}
}
+1
Гаркін
2 апреля, 11:36
1. ты увеличиваешь a++; в цикле while (b < 15)
перенеси его на одну скобку вниз.
2. Не заполненный это значит должно быть " " , а не "*"
3. Кажется по условиям задачи границы должны состоять из Б, а не B.
0
Arseny
2 апреля, 13:44
Забудь про условие задачи, я пытаюсь понять как это работает, как нарисовать этот прямоугольник с пустотой внутри, и у меня к сожалению ничего не выходит
0
Гаркін
2 апреля, 14:09
Подскажу самый простой вариант решения.
У тебя есть код, который рисует стенки.
А теперь добавь код, который рисует потолок и пол. А ещё точнее - две линии. Добавляешь такой сверху от основого кода и снизу. И вуаля!
Понятно, что кол-во строчек (переменная a) в основном коде надо уменьшить.
В чём затык с осознанием?
Нарисуй блок-схему – если да, то это . Если нет, то это…
Ну или пропиши от руки свой код типа.
У меня есть переменная Р, которая отвечает за ряды прямоугольника.
У меня есть переменная К, которая отвечает за колонны.
Если Р = 0 (пол) и 10 (условно) (потолок) – мой код должен запустить цикл, в котором для всех К идет заполнение.
Иначе код должен контролировать что
К=0 – заполняем
К=10 – заполняем.
В промежутках – ставим пробелы.
Можешь еще нарисовать. Прямоугольник и там всё это отмечать (в т.ч. когда пишешь код - мол это закодил, вот это сейчас, а потом вот это ...)
+1
Гаркін
2 апреля, 14:12
О! можешь и https://javarush.com/help/92102 почитать - эта же задача обсуждается.
+1
Danil Nevsky
2 апреля, 14:29
как я тебя понимаю, дружище! сегодня весь день сижу и пытаюсь именно усвоить логику и ничего не выходит. Вроде понял, отошел, через полчаса пробую снова сесть и сделать - делаю ровно те же ошибки. И снова программа не работает.
как работает простой цикл понял, как работает вложенный цикл вроде понял на примере "полного прямоугольника" из символов. А вот когда подключается условный оператор - в голове обезьяна бьет в тарелки! (( Супер демотивирован этим, конечно(
+2
Arseny
3 апреля, 09:49
Дружище, дай знать, когда тебя вдруг осенит и ты разгадаешь этот ребус, и я в свою очередь тоже )
0
hidden #3433120
3 апреля, 16:34
Ниже уже ответили)) инстукции
отличный инструмент, и сокращай где это можно, чтобы воды небыло 0
Anonymous #3303140
2 апреля, 09:56
Значит, ты что-то упускаешь. Покажи код, найдем ошибку
0
Arseny
2 апреля, 10:02
написал код
0
Anonymous #3303140
2 апреля, 10:23
Текстовое описание у тебя правильное, а вот код от него отличается.
закрываем цикл, и во внешнем пишу ему чтоб переносил на другую строку и по новой - ты это пишешь во внутреннем цикле, а не во внешнем.
Кроме того, ещё два факта:
1. Таким образом ты нарисуешь только вертикальные границы, а верхнюю и нижнюю нет. Ведь a тоже может быть граничными значениями.
2. Если b++ выполняется в любой ветке ифа, то почему его не вынести из ифа вообще? Ведь это не зависит от текущего значения b. Заодно можно объединить те ветки ифа, в которых выполняется одно и то же.
0
Arseny
3 апреля, 10:43
Я немного изменил код, получилась буква П, не получается снизу строчку нарисовать, когда пытаюсь добавить еще цикл, конструкция моя рушится
0
Arseny
3 апреля, 10:44
public class Main {
public static void main(String[] args) {
int A = 0;
while (A < 15) {
System.out.print("B");
A++;
}
System.out.println();
int a = 0;
while (a < 10) {
int b = 0;
while (b < 15) {
b++;
if (b == 1) {
System.out.print("B");
} else if (b > 1 && b < 15) {
System.out.print(" ");
} else if (b == 15) {
System.out.print("B");
}
}
System.out.println();
a++;
}
}
}
0
Anonymous #3303140
3 апреля, 11:26
Тебе не нужны циклы спереди и сзади, всё можно сделать в двух центральных циклах.
В каком случае символ является линией? Если это:
- первый столбец;
- последний столбец;
- первая строка;
- последняя строка;
Во всех остальных случаях это серединка прямоугольника, она пустая.
За столбцы отвечает переменная b. За строки - переменная a. Столбцы ты сделал: если b равно 1 или b равно 15, то выводится символ границы. Сделай то же самое для строк.
Смотри, для начала стоит перенести b++ в самый конец цикла. Как у тебя тоже можно, но просто принято начинать отсчёт с нуля. В этом случае проверяемые числа тоже будут на 1 меньше. Ещё я бы сначала те ифы, которые отвечают за вывод границы, а последним бы сделал условие для вывода середины прямоугольника
Это тот же самый код, что и у тебя, только по-другому оформленный.
Как внутри внутреннего цикла обратиться к `a`? Да точно так же, как и к `b`. Если строка является первой (a = 0) или последней (a = 9), то нам нужно выводить символ границы: Вот ты просто добавил условие, что если это первая или последняя строка, то тоже выводишь символ границы. Наверное, логичнее проверять сначала номер строки, а потом номер столбца, но принципиальной роли это не играет. 0
Anonymous #3303140
3 апреля, 11:28
А ещё те ветки ифа, которые выполняют одно и то же действие, можно объединить в одну. У нас есть 4 разных условия, при которых выполняется одна и та же команда - `System.out.println("B");`. Эти условия можно объединить в одно при помощи "логического ИЛИ `||`":
+2
Anonymous #3303140
3 апреля, 11:48
Можно решить эту же задачу так, как пытался ты. Отдельно вывести “крышку”, отдельно “стенки”, отдельно “дно”. Но нужно учесть, что поскольку крышка и дно занимают две строки, то стенки должны быть на 2 строки короче. Если весь прямоугольник должен быть высотой 10, то стенки без крышки и дна - высотой 8. Предлагаю не множить разные переменные, а завести всего две - row и col. Переменная col (столбец) будет отвечать за номер столба в строке, а переменная row - за номер строки. Большая часть этого кода у тебя уже сделана, я только буду использовать не переменные a, A и b, а переменные row и col.
0
hidden #3433120
3 апреля, 16:31
Самое правильное решение ! И самое логическое
0