JavaRush /Курсы /Java Syntax /Задачи на время жизни объекта

Задачи на время жизни объекта

Java Syntax
6 уровень , 5 лекция
Открыта

— Привет, Амиго! Вот тебе пара задачек:

6
Задача
Java Syntax Pro, 6 уровень, 5 лекция
Недоступна
Таблица умножения
Таблица умножения
Комментарии (710)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Егор Чичерин Уровень 5
26 ноября 2021
чет\нечет решается в 3 строчки без массивов, регистрации и смс: 1. while число n не равно 0 2. int i = (n % 10) % 2 == 0 ? even++ : odd++; 3. число n равно число n / 10
Евгений N Уровень 23
31 марта 2022
а мне с стрингами больше нравится возиться

 for ( int i=0; i<s.length(); i++ )
             n = "02468".contains( s.substring(i,i+1) ) ? even++ : odd++;
и спасибо за наводку " even++ : odd++;"
Denys Sukhoivan Уровень 30 Expert
25 октября 2022
А я вот не пойму где я пропустил использование Стрингов. И пока не могу допереть почему мы юзаем Стринги а не инты?
Neonila Kravtcova Уровень 19
10 ноября 2021
Задача понравилась! Решила с первого раза, само решение в 6 строк. Работала именно с числом и модулем %.
Ars Уровень 41
9 сентября 2021
Зачем нужны первые четыре задачи с finalize? Зачем учиться и вообще знать про устаревший несиспользуемый метод? Эти задачи и лекции про finalize убрать и курс стане лучше.
Евгений Уровень 1
4 июля 2021
В "Чет/нечет" не нужны массивы и деления на 10. Ищите метод перебора символов String и будет вам счастье.
Артем Уровень 13
12 августа 2021
Плюсую charAt()
Ислам Маннанов Уровень 7
5 сентября 2021
благодарю. а то уже вообще что то гигантское хотел делать.
Dima Уровень 12
20 октября 2021
Зачем перебирать строку, если нужно перебирать число?
Евгений Уровень 1
20 октября 2021
Dima, 1) Какой тип данных имеет информация полученная из консоли? 2) Что проще перебирать символы строки или символы числа?
Andrei Уровень 7
22 ноября 2021
Я делаю cast к int ' у: int number = Integer.parseInt(reader.readLine());
DimanchikS Уровень 22
18 января 2022
Как вариант взять свою строку и применить у неё метод toCharArray в связке с foreach:

for(char digit : number.toCharArray()) {...}
Iv@n Уровень 12
13 апреля 2021
В задаче про создание 50000 котов и собак finalize() переопределён и вызывается через super - ссылаясь на текущий экземпляр родительского класса, тобишь Object. Отсюда у меня возник вопрос, если я конечно всё правильно понял: " Зачем они это сделали и является ли это более правильным чем написание обычного метода без переопределения?"
hidden #84633 Уровень 1
29 мая 2021
на всякий случай пишу для тех кому не понятно Зачем они это сделали -> чтобы иметь возможность сделать какое "свое" действие, здесь это вывод в консоль.
19 марта 2021
В задаче про чёт/нечёт строку сразу сохранял в массив символов (ребята в интернете подсказали как это сделать), прямо в момент ввода, а потом в цикле проходил массив, по очереди каждый символ переводил в int и проверял чёт/нечёт. Решение на 30 строк. Посмотрел "правильное" решение: сломается как только введёшь число больше 1 млрд. Бу-у-у-у.
Маруся Уровень 7
24 марта 2021
Владимир, программа сломалась, не потому что программа в правильном решении плохая, а потому что используется int, у него есть ограничение в использовании вместимых в него чисел, а это: минимальное значение - 2,147,483,648, максимальное значение 2,147,483,647 (включительно). Нужно просто еще не забывать про вместимость типов данных. Так что это не программа плохая :)). Ну и нужно учитывать, что такую элементарную вещь как в задании, нельзя решать 30 строками кода иначе вы представляете сколько будет выполняться программа, если она не состоит из одного условия, а к примеру из очень большого кол-ва задач, тогда это будет только тормозить программу. По этому, нужно писать код всегда максимально, по возможности коротко и понятно, чтобы ваши коллеги или разработчик который придет на ваше место не упал со стула при виде такого громоздкого решения маленькой задачи))). Собственно чем легче читаемость и меньше место занимаемое в памяти, тем лучше, как-то так.
25 марта 2021
А! И вот ещё момент... Если в "правильном" решение на вход подать 10 чётных чисел, например вот так: "0000000000" то результат будет: Even: 0 Odd: 0 Это что? Правильно?
Маруся Уровень 7
25 марта 2021
Если вы имеете в виду, деление на ноль, то в математике — деление на ноль, делитель равен нулю.
26 марта 2021
Нет. Ноль - это чётное число. И если пользователь введёт строку начинающуюся с "0", или вообще вот такую строку "0000000000", то Ваш способ приведёт всё к int не посчитает эти нули и ответ будет неверный. И опять же, никуда не денется вариант, если написать много цифр, то они не влезут в int и ответ будет неверный. Написал об этом в сапорт. Возможно на текущем этапе обучения нет смысла усложнять, но может есть смысл обозначить этот момент у условиях задачи. Написал выше свой вариант, но что-то тупанул и выложил полное решение. Его скрыли, т.к. нельзя по правилам выкладывать полное решение. Но там строчек столько же сколько и в правильном решении, просто все символы сразу кладём в символьный массив, а потом циклом проходим и считает кто там чётный, а кто нечётный.
Маруся Уровень 7
27 марта 2021
Так в этом и разница, между строками и числами. В решении используется деление в 2х местах, и ноль считывается как ноль, и мы работаем с этими данными. Т.е. программа так и понимает пользователь ввел ноль значит деление выдаст ноль. Т.к. деление идет на ноль, мы считываем цифры а не строки. Просто с чем будет программа работать, если даже в цикле указано что вводимое число, больше нуля. А если мы вводим ноль, то и программа выдаст ноль, ей не с чем работать.
Артем Уровень 13
12 августа 2021
Вообще, по сути на вход нужно ввести число, а 00000 такого числа нету, либо считать его как просто 0, тогда 1 четная цифра получается
18 марта 2021
Задача про 50000 несколько раз запускал и даже валидацию прошло, но ни разу не написало про уничтожение. И ещё непонятно почему finalize зачёркнуто... 🤔 Кто-нибудь знает почему? Спасибо.
18 марта 2021
А в следующей задаче, после валидации, ради проверки поставил не 50 000, а 5 000 000 и выяснилось что периодически он всё-таки запускается. Счётчик периодически уменьшается и под конец было не 5 000 000 котов, а 1 310 547.
Маруся Уровень 7
24 марта 2021
Оно и не сразу будет уничтожено, а как только запустится сборщик мусора. Они перечеркнуты не в Java, а в Вашей IDE. Что значит что он не рекомендуется для использования и считается устаревшим.
25 марта 2021
Не знал, что IDEA таким образом обозначает устаревшие штуки. Зачем же в таком случае изучать finalize... Может есть более передовой способ. Погуглю. Спасибо.
Маруся Уровень 7
25 марта 2021
Не совсем так, он перечёркивает, показывая, что в дальнейшем использовать это метод нельзя. Так с любым другим методом может быть.
Sergey Badanin Уровень 10
18 марта 2021
- Привет, Амиго! Вот тебе пара пять задачек😄
Игорь Кривцов Уровень 16
12 марта 2021
Задача про 50 000 котов и собак... запускал несколько раз, ни разу не написала, что, что-то уничтожено ))) ...
Wiun Уровень 16
17 марта 2021
а я прочитал так

написала, что ты ничтожество
😅 10 часов джавы за день видать немного слишком
Игорь Кривцов Уровень 16
18 марта 2021
там спереди написано "... ни разу не ... " и потом уже то что ты прочитал! так что все нормально она пишет ))
18 марта 2021
Поставь ради теста, не 50 000, а 5 000 000. Я так понял, Java там сама по себе, в зависимости от какой-то своей необходимости иногда запускает удаление.
Viktory Уровень 6
2 марта 2021
Последняя задачка заставила погуглить 😁, дурацкое чувство, когда ты знаешь как решить, но не знаешь КАК 🤣 Оказалось всё не так сложно: переводим строку в массив и разделяем на символы. Создаём массив интов, поочереди, в цикле, проходим по стринговому массиву и переопределяем строки в инты. А потом обычный if с вычислением остатка и всё.) Решение на 40 строк.
Алексей Уровень 6
26 апреля 2021
Почему 40 строк? У меня 11.... Задача отличная, понравилась.
Лизунов Сергей Уровень 41
18 мая 2021
Решал похоже. 9 строк от ввода до вывода включительно (можно 7, если фигурные скобки не делать красиво :-) ). P.S. Массив интов можно и не создавать, сразу в цикле преобразовывать и считать.