Задача мною решена, но пришлось потратить еще 3-5 лишних попыток, чтобы она была решена так, как хочется валидатору. А суть жалобы в том, что в ходе попыток решения задания long id, String name; были указаны мною с модификатором static. Ок, согласен что это ну не совсем корректно, но где в условии сказано, что они должны быть не статичны? Тут либо принимать решение со static, либо указывать доп.условия.
Saturn
15 уровень
Свинство в условии задачи!
Решен
Комментарии (16)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Васильtrainee в Kindgeek
15 ноября 2021, 16:41
Здесь сейчас не видно задачи которую вы решали. Нужно приложить условие задачи в комментах, и желательно код.
0
Saturn
15 ноября 2021, 16:55
Лови:
Только сейчас придет модер, всунет свой пятак и заблокирует мой код (
0
Стас ПасинковSoftware Developer в ZipyMaster
15 ноября 2021, 20:59
код тут не нужен.
представьте, что ваша задача - это посчитать сумму положительных чисел.
и вы решили хранить сумму в статической переменной.
как вы догадываетесь, ваш код проверяет не живой человек, а автоматические тесты.
вы написали код, который считывает число, проверяет больше ли оно нуля, и потом прибавляет к статической сумме. все верно.
запускаете у себя - все чудесно работает.
вот только запускаете вы его один раз.
автоматические тесты прогоняют ваш код на множестве разных значений. без перезапуска самой jvm. сначала выполняют первый тест со своим набором данных, потом второй, третий. и все это без перезапуска. просто вызывая каждый раз ваш метод (например, main).
допустим, первый тест содержит набор данных: 1, 2, 3
второй тест содержит набор данных: -1, 2, 3
запускаем.
после первого теста ваша статическая сумма равна 6. как и ожидается в тесте. тест пройден.
но при запуске второго теста, у вас сумма ваша не 0, как вам того хотелось бы, а 6 (от прошлого запуска). поэтому 6 - 1 + 2 + 3 будет совсем не 5, как того ожидает второй тест. тест не пройден, решение не засчитано.
где-то даже то ли в FAQ, то ли где писалось, что старайтесь не использовать статики, если о том явно не сказано в задании. вот как-раз таки именно по этой причине.
либо обнуляйте все свои статики при старте программы, либо просто не используйте их (этот вариант предпочтительней)
+3
Saturn
16 ноября 2021, 10:53
Ок. А как мне "обнулять" статики? Просто прописывать в полях класса
"static int someVar = 0;" ?
"static String text = null;"?
0
Ksenia VolkovaJava Developer в DXCMaster
16 ноября 2021, 11:01
Лучше просто не используй их там, где они не нужны.
Ведь в программе может быть не один юзер, а несколько. И у каждого должен быть свой id и имя. А у тебя получаются одни и те же значения для всех.
0
Saturn
16 ноября 2021, 12:02
Та это я понял, но на данном этапе надо все же продолжать намекать на это, а не выбешивать не совсем корректной подачей условия. Либо ввести тему: "С этого момента вы забываете про статические переменные, потому что ...........".
0
Ksenia VolkovaJava Developer в DXCMaster
16 ноября 2021, 12:07
Да про них не надо забывать! Надо просто понимать, чем статические члены класса отличаются от нестатических.
Если эта тема не зашла (недостаточно информации, непонятное объяснение) - поищи и почитай в другом месте.
Потому что поля, которые являются характеристикой конкретного объекта, никак не должны быть статическими.
0
Saturn
16 ноября 2021, 13:56
Ок. Но конкретно в ЭТОЙ задаче объект создается один, и на ход решения это никак не влияет, если объект ОДИН, верно?
0
Ksenia VolkovaJava Developer в DXCMaster
16 ноября 2021, 14:03
Ты хочешь сказать, что в твоем конкретном методе main объект создается один.
Но не надо думать, что main - это и есть твоя задача. Во многих заданиях метод main вообще не проверяется. Потому что важен не он, а выполнение условий задания.
Например, в этом задании требуется, чтобы метод возвращал корректный объект. А он у тебя будет корректным только если создается в единственном экземпляре. Но в условии ничего такого не написано, никаких ограничений на количество объектов нет.
Вообще, когда выполняешь задание, имей в виду, что валидатор проверяет не твой main и как ты в нем что-то вызываешь. Он будет вызывать твои методы сам, с разными параметрами - и смотреть, соответствует ли результат ожидаемому.
+1
Saturn
16 ноября 2021, 14:12
Ой всё.
В этом и жопа некоторых задач на Джавараш: то решай задачу как душе угодно, хоть боком, хоть раком, хоть на потолке, то нужно соблюдать писанные-неписанные правила приличия, и пофиг, что при любых условиях КОНКРЕТНАЯ задача все равно будет выполнятся.
0
Ksenia VolkovaJava Developer в DXCMaster
16 ноября 2021, 14:26решение
Просто отвыкай думать что твой main - это и есть твоя программа.
Если есть задание реализовать какой-то метод в соответсвии с какими-то требованиями, то совершенно без разницы, что ты там с ними делаешь в своем конкретном main.
Ты пишешь метод. Он может быть вызван кем угодно, откуда угодно, с какими угодно параметрами. Это не должно влиять на его работу.
Это как если бы ты писал калькулятор, который считает правильно только если числа четные, сегодня пятница и с утра был дождь. Ну просто потому что в каком-то твоем конкретном случае обстоятельства были именно такими.
+2
Saturn
16 ноября 2021, 15:06
Ой всё еще раз.
0
Стас ПасинковSoftware Developer в ZipyMaster
16 ноября 2021, 15:30
это не прихоть джавараша :)
это особенность работы статических переменных в джаве вообще.
сколько бы ты объектов класса не создавал (сколько бы ты инстансов тестов не запускал) - статические переменные не обнуляются при создании нового объекта. они "обнуляются" только при перезапуске всего приложения.
Либо ввести тему: "С этого момента вы забываете про статические переменные, потому что ...........".
я же говорю, где-то я встречал такую рекомендацию от джавараша :) просто сейчас уже не помню где. может где-то в лекциях, или в какой-то статье от администрации, не помню.
в любом случае, я не очень часто встречаю на практике использование статических переменных вообще. не констант (константы часто используются, например public static final String PROTOCOL = "https";), а вот именно переменных, которые меняют свое значение во время работы программы. поэтому, я считаю, что если вы уже сейчас будете стараться писать свой код так, чтобы не использовать их там, где можно обойтись нестатической переменной, или даже локальной - то вам от этого будет только лучше :)
я тоже когда-то столкнулся с этим, тоже у меня это вызвало недоумение, тоже мне кто-то объяснил - и дальше я уже на эти грабли не наступал (ну почти😄)
+2
Saturn
16 ноября 2021, 15:36
Ок. Спасибо за ответы!) Буду стараться так не косячить)
Вот что значит доходчивый и полезный коммент, не то что Ксения, чуть не заклевала меня ((( :
0
Стас ПасинковSoftware Developer в ZipyMaster
16 ноября 2021, 16:03
а вот тут не соглашусь :)
Ксения (и еще несколько людей, но ее ответы я вижу намного чаще) - это просто находка для джавараша! не будь ее - так тут 80% учеников джавараша купались бы с головой в своем говнокоде и брызгались бы им друг в друга))
все ее ответы четкие и правильные.
сколько раз замечал, что в треде, где она дала ответ - уже нечего обсуждать. остается только донести до автора вопроса этот ответ, чтоб он его наконец-то перепрочитал и понял))
кучу раз видел вопросы, где я не мог найти где же у человека ошибка, и предлагал попробовать одно, другое. а потом приходила Ксения и четко указывала в каком месте что не так.
нет, она давно заслужила мое уважение, и уверенно держит марку :)
за все те годы, что она тут помогает - я уже даже не знаю сколько человек с ее помощью стали программистами)
ну а насчет того, что мой стиль ответа зашел больше, чем ее - то это даже редкость) часто было и так, что кто-то просто не воспринимает мои ответы именно из-за стиля, подачи. некоторые даже агрились)))
+3
Saturn
16 ноября 2021, 16:40
Каждому свое 😉
+1