Добрый день!
Столкнулся с трудностями при проверке задания 0526 (Мужчина и женщина) валидатором.
https://pastebin.com/x6iJKX8Q (не могу прикрепить код, так как задача уже решена)
это решение не проходит валидацию на п.7 (В методе main необходимо создать по 2 объекта каждого типа)
Опытным путем установил, что валидатор засчитывает п.7, если в main использовать конструкторы с самой детальной сигнатурой.
Подскажите, пожалуйста — это баг?
Zhecker
26 уровень
Валидатор
Решен
Комментарии (29)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
YuriyExpert
26 декабря 2019, 10:08решение
Это не баг, это условие задачи.
+4
Zhecker
26 декабря 2019, 11:43
1. Внутри класса Solution создай public static классы Man и Woman.
2. У классов должны быть поля: name (String), age (int), address (String).
3. Создай конструкторы, в которые передаются все возможные параметры.
4. Создай по два объекта каждого класса со всеми данными используя конструктор.
5. Объекты выведи на экран в таком формате: name + " " + age + " " + address
Где указание на то, какой именно конструктор использовать?
0
Александр
26 декабря 2019, 11:47
Пункт 3. Все возможные параметры.
0
Zhecker
26 декабря 2019, 11:48
Такой конструктор есть, пункт выполнен и валидируется
0
Александр
26 декабря 2019, 11:53
Тогда не очень понятно, в чем непонимание.
Есть явное указание, что конструктор должен передавать все параметры.
Вы создали конструктор принимающий вссе параметры: "Опытным путем установил, что валидатор засчитывает п.7, если в main использовать конструкторы с самой детальной сигнатурой.".
0
Zhecker
26 декабря 2019, 11:55
Непонимание в том, почему мне валидатор запрещает использовать перегруженный упрощенный конструктор.
0
YuriyExpert
26 декабря 2019, 12:59
Что Вы понимаете под словами "упрощенный конструктор" и в чем заключается его перегрузка?
0
Zhecker
26 декабря 2019, 13:07
Поскольку конструкторов в классе больше, чем один - они являются перегруженными.
Под упрощенным подразумевал конструктор, содержащий в сигнатуре меньше параметров.
0
YuriyExpert
26 декабря 2019, 13:11
Где вы в условии увидели требование о том, чтобы конструкторов было несколько? Множественное число употреблено только потому, что речь идет о конструкторе класса Man и конструкторе класса Woman. И нет ни слова о том, что хотя бы в одном из классов нужен конструктор по умолчанию.
0
Zhecker
26 декабря 2019, 13:16
В таком случае, где вы увидели запрет перегружать конструкторы и требование для создания объектов класса использовать непременно конструктор с определенным количеством параметров?
0
YuriyExpert
26 декабря 2019, 13:23
Речь о двух классах, поэтому формулировка "Создай конструкторы, в которые передаются все возможные параметры" для каждого из этих классов в отдельности превращается в "Создай конструктор, в который передаются все возможные параметры".
Конструктор по умолчанию будет в любом классе, даже если Вы его явно не описывали. Если Вы добавляете реализацию конструктора в класс, конструктор по умолчанию в нем более не используется и если он все-таки необходим, то его надо явно добавлять отдельно. По условию этого не требуется, но Вы это сделали, т.е. нарушили условие.
0
Zhecker
26 декабря 2019, 14:49
Повторяю - в условиях нет запрета на перегрузку конструкторов и явных указаний на то, каким именно конструтором создавать экземпляр класса => никаких условий не было нарушено.
Если уж на то пошло, дополнительные конструкторы под капотом вызывают все тот же конструктор из задания, он в любом случае вызывается.
Так что валидатор проверяет создание объектов по условию "был ли вызван конструктор N в методе main", а это некорректно.
Сам результат валидации выглядел следующим образом:
1) Создать по 2 объекта - FAILURE
2) Вывести эти объекты на экран - OK
Как такое вообще возможно? У кого вызывается toString(), раз объекты якобы не созданы?
0
YuriyExpert
26 декабря 2019, 14:55
Ваши рассуждения некорректны, условия задачи не выполнены. Если не желаете понимать и разбираться, то оставайтесь при своем мнении, но учтите, что делаете хуже только самому себе.
0
Zhecker
26 декабря 2019, 14:58
Ткните пальцем, какое из условий не выполнено
0
YuriyExpert
26 декабря 2019, 15:04
Уже писал выше:
Речь о двух классах, поэтому формулировка "Создай конструкторы, в которые передаются все возможные параметры" для каждого из этих классов в отдельности превращается в "Создай конструктор, в который передаются все возможные параметры".
0
Zhecker
26 декабря 2019, 15:07
Для каждого класса такой конструктор есть (строки 37-41, 66-70)
0
YuriyExpert
26 декабря 2019, 15:16
Вы это условие не выполнили не потом, что у Вас нужных конструкторов нет, а потому что помимо них нагородили лишних конструкторов которых по условию не должно быть. В явном виде запрета на дополнительные конструкторы нет, но на это очень жирно намекает тот факт, что при создании в классе конструктора с параметром конструктор по умолчанию становится недоступен. Если бы Вы внимательно ознакомились с материалом по первой ссылке из предыдущей лекции, то подобных вопросов не возникло бы.
0
Zhecker
26 декабря 2019, 15:21
Программа засчитывается со всеми "нагороженными лишними" конструкторами, стоит лишь вызвать в main конструктор с тремя параметрами напрямую, а не опосредованно. Как это объясните?
0
YuriyExpert
26 декабря 2019, 15:33
В условии 3 пунктом требуется создать конструктор класса со всеми параметрами, о других конструкторах речи нет и по вышеописанным причинам предполагается что их и нет.
В 4 пункте требуется создать два объекта класса используя конструктор, который, как мы выяснили единственный, так что никакой неоднозначности не возникает.
Вы зачем-то добавили конструктор который не требуется условием, видимо использовали именно его для создания объектов и почему-то удивляетесь результату. Даже если Вы внутри своего конструктора вызываете нужный, то такой подход не соответствует условию.
Вы бы еще вынесли классы Man и Woman в отдельные файлы или через Reflection зашли - так же тоже работать будет и условием явно не запрещено.
0
Zhecker
26 декабря 2019, 16:14
Если бы в задании было сказано "непременно вызови созданный конструктор сигнатуры N в main", вы были бы правы.
Но там нет НИКАКИХ запретов или указаний, каким именно образом должны быть созданы 2 объекта каждого класса. Проверять main на вызов конструктора именно заданной сигнатуры в задании "создай 2 объекта" - некорректно
0
YuriyExpert
26 декабря 2019, 17:30
Именно это в задании и написано, как бы Вы не пытались увидеть обратное. Куда уж подробнее пояснить я даже не знаю. Считаете что все ошибаются, а Вы единственный носитель истины - Ваше право.
0
Zhecker
26 декабря 2019, 18:14
Я считаю, что условия задачи и то, что в задаче проверяется - в этом конкретном кейсе не одно и то же. И попытки увязать эти вещи воедино с помощью вороха костылей-"предполагается" мне показались неубедительными. Вот и все.
0
YuriyExpert
26 декабря 2019, 18:20
Условия/требования задачи надо понимать и выполнять максимально конкретно. Добиться результата требуемого на выходе можно множеством вариантов, но условиями количество этих вариантов значительно сужено.
Если Вы считаете что в конкретной задаче ошибка несколько лет ускользавшая от взглядов нескольких тысяч человек решивших ее, то можете написать запрос администрации проекта.
0
Zhecker
26 декабря 2019, 18:44
Ну так именно в этом и суть вопроса. Я считаю, что программа не нарушила ни одного из указанных ограничений. Вы мне неустанно доказываете, что существуют некие неявные дополнительные требования, проистекающие из контекста проходимого курса и особой трактовки имеющихся пунктов.
А на деле мы имеем вместо проверки "создан ли объект" проверку "вызван ли конструктор конкретного вида напрямую".
Невыполненный пункт даже высвечивается как "Создать 2 объекта каждого класса - fail".
Поразительно, что вы это считаете корректным поведением.
0
YuriyExpert
26 декабря 2019, 18:49
Вы написали не в техническую поддержку, а опубликовали вопрос пользователям. Я информирую Вас, что Вы некорректно поняли условие задачи, никаких дополнительных требований здесь нет, надо просто делать именно то что требуется, а не то что Вам кажется.
0
Zhecker
26 декабря 2019, 18:54
Опубликовать этот вопрос здесь - просьба саппорта.
Возможно, она скажет что-то кроме "твои объекты не объекты, потому что ты их создал через перегруженный конструктор, а не напрямую. Это запрещено, а ты догадаться должен был"
0
YuriyExpert
26 декабря 2019, 19:01
Т.е. Вы написали в саппорт, который не согласился с тем, что это ошибка и отправил Вас сюда. Я здесь Вам ответил и пояснил что это не ошибка. Но Вы продолжаете настаивать на своем. Ну что ж, удачи - с таким подходом она Вам определенно понадобится...
0
Zhecker
26 декабря 2019, 19:12
Еще один пример "предполагается"-подхода?
Добрый день.
Пожалуйста, создайте топик в разделе Помощь на сайте и передайте нам ссылку на него. Мы передадим Ваш вопрос разработчикам, и Вам обязательно помогут разобраться.
Ваши намеки на мою глупость меня уже порядком утомили.
Давайте так поступим: пока для вас условия "вызвать строго определенный конструктор в строго отведенном месте" и "создать объект" тождественны - этот спор не имеет смысла, и на том и порешим.
0
YuriyExpert
26 декабря 2019, 19:19
Вам не кажется, что между фразы "Вам помогут разобраться" и "ошибку исправим" значат не одно и то же?
0