Поясните, пожалуйста, почему в конструкторе класса Robot мы присваиваем this.id значение ++robotCounter (this.id = ++robotCounter;), а не robotCounter = ++robotCounter;? Я не уловил логику зачем для счетчика мы дополнительно создам обычную переменную id, а не используем ту же robotCounter (robotCounter = ++robotCounter;)? Почеу нельзя обойтись одной переменной вместо двух? Я уже после правильного решения попробовал в IDEA обойтись без переменной id, только логикой robotCounter = ++robotCounter; и System.out.printf(...robotCounter, robotCounter, model, vendor...); и в консоль выводятся такие же корректные значения счетчика "Я 1-й из 1... Я 2-й из 2...". Что я упускаю?
Вадим З.
33 уровень
Поясните, пожалуйста, почему в конструкторе класса Robot мы присваиваем this.id значение ++robotCounter?
Решен
Комментарии (5)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
hidden #3303140
8 сентября 2024, 06:59
Ты снова задаёшь вопрос, не прикрепляя к нему код и условие задачи. Ответить на него могут только те, кто знает, о какой задаче идёт речь, а многим она не доступна (например, мне), потому что у меня нет подписки.
И тем не менее ответ.
robotCounter - это статическая переменная. Она относится не к конкретному экземпляру класса, а ко всему классу Robot. В ней хранится общее число созданных объектов. id - это не статическая переменная, её значение своё у каждого робота; оно равно значению robotCounter на момент его создания.
Да, если сразу создания каждого робота выводить этот текст, то он будет «1й из 1», «2й из 2» и т.д., потому что так и есть. Тем не менее, если сначала создать армию роботов, а потом у каждого вывести текст, то у каждого robotCounter будет равен их общему числу, а айди будет у каждого своё.
0
Вадим З.
8 сентября 2024, 15:33
Да, прошу прощения - не получается прикрепить код, когда задача уже была решена . Система выдает сообщение: " Вы не можете прикрепить к вопросу код решения вашей задачи, так как задача уже решена. Публиковать правильные решения запрещено! "
Для всех, кто не имеет доступ к задаче - условие такое: "В методе main создается 5 роботов и выводится информация о них.
Убери максимально возможное количество модификаторов static так, чтобы функционал программы не изменился.
В методе main менять ничего не нужно.
Требования: Модификатор static должен быть расставлен правильно.".
И непосредственно код класса и метода:
Да не забанят меня админы ..
0
Вадим З.
8 сентября 2024, 15:43
Благодарю за ответ твоя логика понятна и очевидна. Но в конкретно нашем коде в методе main просто идт создание объекта и вызов метода
и так 5 раз. Т. е. если следовать логике конкретно нашего кода, то в принципе можно обойтись без переменной id?
0
hidden #3303140
8 сентября 2024, 18:49
Нет, ты путаешь причину и следствие, или, вернее сказать, дизайн и его использование.
Класс задуман так, чтобы для любого экземпляра этого класса можно было вывести информацию о том, какой это по счету экземпляр из какого общего числа. Он не может отвечать за то, будут ли другие классы этим пользоваться или нет. Метод main сам по себе, в нем написан такой код, как ты приводишь, мог быть написан другой - это не значит, что надо подстраивать код в классе Робот под ту или иную ситуацию.
0
Вадим З.
9 сентября 2024, 16:12
Вот! Спасибо, это то что надо. Твое последнее предложение объясняет все мои сомнения. Бывает в заданиях попадаются задачи, в которых код в правильном решении от разработчиков сложнее моего кода, который тоже соответствует условиям задачи, выполняет поставленную задачу и принимается валидатором. При этом не содержит лишних строк, которые есть в ответе от разработчиков. Теперь стало понятно почему так происходит.
0