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

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

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

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

6
Задача
Java Syntax Pro, 6 уровень, 5 лекция
Недоступна
Таблица умножения
Проинициализируй массив MULTIPLICATION_TABLE значением new int[10][10], заполни его таблицей умножения и выведи в консоли в следующем виде: 1 2 3 4 … 2 4 6 8 … 3 6 9 12 … 4 8 12 16 … … Числа в строке разделены пробелом.
Комментарии (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 убрать и курс стане лучше.
Евгений Уровень 41
4 июля 2021
В "Чет/нечет" не нужны массивы и деления на 10. Ищите метод перебора символов String и будет вам счастье.
Артем Уровень 13
12 августа 2021
Плюсую charAt()
Ислам Маннанов Уровень 7
5 сентября 2021
благодарю. а то уже вообще что то гигантское хотел делать.
Dima Уровень 12
20 октября 2021
Зачем перебирать строку, если нужно перебирать число?
Евгений Уровень 41
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. Отсюда у меня возник вопрос, если я конечно всё правильно понял: " Зачем они это сделали и является ли это более правильным чем написание обычного метода без переопределения?"
Jonnius Уровень 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. Массив интов можно и не создавать, сразу в цикле преобразовывать и считать.