while (true) {
String name = reader.readLine();
if (name == null || name.isEmpty()) {
break;
}
int age = Integer.parseInt(reader.readLine());
int weight = Integer.parseInt(reader.readLine());
int tailLength = Integer.parseInt(reader.readLine());
Cat cat = new Cat(name, age, weight, tailLength);
CATS.add(cat);
}
Вопрос в следующем: почему, если объявить и инициализировать переменные возрост, вес, хвост сразу после переменной имя, они недоступны для конструктора Кот становятся? Юра
20 уровень
Решил, но остались вопросы
Архивный
Комментарии (14)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Юра
18 ноября 2019, 15:15
public class Solution {
public final static ArrayList<Cat> CATS = new ArrayList<>();
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
0
Marvell QA Automation Engineer
18 ноября 2019, 07:28
все переменные остаются доступные, область их видимости внутрянка цикла
0
Артем DivertittoSenior Android-разработчи в United TechMaster
18 ноября 2019, 07:26
Покажи код в котором не доступный, должно всё быть доступным
+1
Юра
18 ноября 2019, 15:18
Не дает прикрепить , пишит что решена, спс.
0
Виктор
20 декабря 2019, 21:11
Добрый день У меня такой же вопрос. Думал вообще не правильно понимаю, но я тоже ставил переменные как в коде ниже и их не видит конструктор. А после блока if видит. Почему так, подскажите пожалуйста.
while (true) {
String name = reader.readLine();
nt age = Integer.parseInt(reader.readLine());
int weight = Integer.parseInt(reader.readLine());
int tailLength = Integer.parseInt(reader.readLine());
if (name == null || name.isEmpty()) {
printList();
break;
}
i
0
Юра
23 декабря 2019, 08:26
Ку
Я не могу вам ответить , тк сам не получил ответа.
0
Виктор
23 декабря 2019, 12:32
Я получил следующее объяснение по данному коду. Если блок " if " будет стоять после вводимых данных то будет получаться, что если " name " пусто, но есть три строки какие-то не пустые, что не должно быть. Из-за этого нужно условное выражение ставить после ввода " name ". Если " name " пусто, то завершаем цикл. Не знаю правильно это или нет
0
Юра
24 декабря 2019, 09:00
Возможно, я сейчас неправильно скажу, но тут причина в жесткой последовательности инициализации элементов класса при создании нового объекта, с которой вы познакомитесь на 15 уровне. Так вот, оказывается конструктор отрабатывает, как это не страно, самым последним. Касательно нашего разговора, если указать конструктор перед блоком if, то у конструктора нет всех параметров бля создания объекта, ведь name ниже.
+1
Ksenia VolkovaJava Developer в DXCMaster
24 декабря 2019, 10:07
Они могут быть недоступны, если внутри if окажутся.
А так - доступно всё.
0
Юра
24 декабря 2019, 10:42
Внимательно вопрос читай: до или после if, а не в нем
0
Ksenia VolkovaJava Developer в DXCMaster
24 декабря 2019, 10:59
Внимательно читай ответ.
Тут все будет доступно:
Другое дело, что в этом случае на пустой строке ввод не прекратится.
0
Юра
24 декабря 2019, 12:30
Перечитал, цитирую:
Они могут быть недоступны, если внутри if окажутся. А так - доступно всё.
Еще раз: про внутри никто не спрашивал
0
Ksenia VolkovaJava Developer в DXCMaster
24 декабря 2019, 12:42
Так я и ответила, что всё доступно - хоть до if, хоть после.
Проблемы могут быть, только если внутрь попадет.
0
Виктор
24 декабря 2019, 13:12
Спасибо) Почитаю обязательно.
0