User, Loser, Coder and Proger

  • 16
  • Недоступна
1. Ввести [в цикле] с клавиатуры несколько строк (ключей). Строки(ключи) могут быть такими: "user", "loser", "coder", "proger". Ввод окончен, когда строка не совпадает ни с одной из выше указанных. 2. Для каждой введенной строки нужно: 2.1. Создать соответствующий объект [см. Person.java], например
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (363)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий вы должны авторизоваться
вчера, 22:22
Подскажите, почему в Идее задача не компилируется, но валидацию проходит?
Alexander 15 уровень, Бердянск
23 января, 20:22
Обязательно хочет через инстанс оф, блин (
baddan 15 уровень, Тамбов
23 января, 11:11
задача простая, но замучился ее набирать
Alexander Komlichenko 17 уровень, Москва
17 января, 21:39
Как обычно, пишешь красивый рабочий код, а его не принимает, потому что потому. Главное что мне нравится, коротко и ясно. А по хорошему можно удалить метод doWork - выглядит как костыль. public static void main(String[] args) throws IOException { BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); Person person = null; String key = null; key = reader.readLine(); while (true) { if (key.contains("user") || key.contains("coder") | key.contains("proger")| key.contains("loser")) { if (key.contains("user")) doWork(new User()); if (key.contains("loser")) doWork(new Loser()); if (key.contains("coder")) doWork(new Coder()); if (key.contains("proger")) doWork(new Proger()); key = reader.readLine(); } else break; } reader.close(); } public static void doWork(Person person) { if (person instanceof User) User.live(); if (person instanceof Loser) Loser.doNothing(); if (person instanceof Coder) Coder.writeCode(); if (person instanceof Proger) Proger.enjoy(); } }
Василий 14 уровень
13 января, 07:12
Почему в IDEA
if (key == "user") person = new Person.User();
System.out.println(person);
выдает com.myPackage.Person$User@14ae5a5 а Javarush выдает null
mixk88 15 уровень, Красноярск
13 января, 09:49
оператор == сравнивает ссылки на объекты, в данной задаче корректнее использовать метод equals() он сравнивает непосредственно эквивалентность объектов. Можно погуглить подробное описание обоих способов, я лишь свое грубое понимание изложил, но equals работает здесь 100%. кстати не понял зачем нужна строка System.out.println(person);? для какой то проверки? в данном месте же надо вызывать doWork
Василий 14 уровень
13 января, 12:50
Да, Вы правы. Теперь последние четыре пункта с ошибкой "Не выполнены все требования задачи", хотя вывод в консоль правильный.
Иван 18 уровень, Москва
21 января, 07:05
Вставлю свои 5 копеек. Абсолютно согласен с использованием equals(), но лично я считаю, что лучше использовать .equalsIgnoreCase(). Конечно в данной задаче это не критично, но в реалиях сего мира игнорировать регистр букв введенных пользователем было бы правильнее.
baddan 15 уровень, Тамбов
23 января, 11:10
если в ТЗ неуказано. то и не надо придумывать. А то получится, плохо. Такие самостоятельные умозаключения могут ослабить допустим надежность паролей или проверку правильности Наименований.
🦔 Виктор админ Java Android канала в telegram @LetsCodeItExpert
6 января, 00:03
Запугивают нас сложностью хард, но если пошагово следовать ТЗ, то не так страшен черт как его малюют: 1. Заводим вечный цикл пока (истина) { ... 2. Загоняем в ключ строку с клавиатуры. 3. Если (ключ.соответствует("пользователю")), то { ... 4. Переменной типа человек присваиваем новый объект соответствующего класса = новый Человек.Пользователь(); 5. Вызываем метод работы, которому аргументом передаём нашего свежесозданного пользователя. 6. Иначе если (ключ.соответствует("лузеру")), то проделываем всё тоже самое, только для объекта другого типа. 7. Иначе если ввели что-то другое с клавиатуры, то ломаем цикл с помощью break; 8. Тут я понял, что упустил подходящий момент для использования свитча, даже IDEA предлагает заменить весь этот огород с иф-элсами на него. 9. В методе работы проверяем, если (переданныйАргументомЧеловек является экземпляром Пользователя), то приводим его к данному типу и вызываем соответствующий метод ((Человек.Пользователь) человек).жить(); [также прогоняем всех остальных в методе]. 10. Всё получится! -- tlgrm: @LetsCodeIt | @SefoNotasi
mixk88 15 уровень, Красноярск
13 января, 08:36
Ради интереса не пробовали сделать потом через свитч проверку ключей и создание объектов? Я изначально начал через свитч но то ли не сообразил как сделать корректно, то ли это не возможно в данном контексте, получается, допустим мы проверяем кейс что ключ=юзер, если далее ставим брейк то все прерывается, если не ставим ничего то разом выполнится метод dowork для всех объектов, пробовал вместо брэйка ставить reader.readline(), но у меня работало некорректно метод dowork вызывался не для тех объектов, возможно я был близок к решению данным способом но чего то не хватило. А вот пукт 3 ( doWork) можно было через свитч сделать легко как мне кажеся, но я через иф сделал
🦔 Виктор админ Java Android канала в telegram @LetsCodeItExpert
13 января, 10:01
Вернулся, попробовал через свитч, всё получилось: p.s. Правда, задачу не сбрасывал, поэтому не знаю, принимает ли валидатор такой вариант или нет.
mixk88 15 уровень, Красноярск
13 января, 10:25
вот точно, я теперь понял что моя ошибка была в том что я сразу пробовал через свитч без цикла вайл, пытался вместо бреак придумать логику как перейти к следующему кейсу=)
masher 15 уровень, Одесса
14 января, 06:02
Можно вынести за пределы цикла свитч doWork(person); В ифах или свитче только проверять ключ и создавать объекты, затем вызывать doWork(person);
Андрей 16 уровень, Москва
16 декабря 2020, 16:20
Не нашел похожего. Без if'ов в цикле. 1) Создал коллекцию Map, где ключ - строки, значение - объекты. 2) В цикле, по введенному значению получал объекты.
Ivan Shcherabakov 16 уровень, Минск
29 ноября 2020, 20:01
По началу думал, что задачка очень сложная. Но потом перечитав условие 3 раза, наверное произошло чудо. Все стало ясно, кроме одного...как ввести столько ключей в один цикл? Начал читать про регулярные выражения для обработки строк. И все стало ясно. Правда надо было наверное сразу в обсуждение залезть (Павел все написал давно :) )
Павел 24 уровень, Минск
20 ноября 2020, 10:36
Не моё (спасибо пользователю Fds59), просто подниму вверх, так как ну уж очень понравилось:
while ((key = reader.readLine()).matches("user|loser|coder|proger"))
Artyom Sorokin 17 уровень, Гомель
25 декабря 2020, 16:26
пришёл похвалиться что тоже заюзал метод matches(), но вижу что я не один такой)
Станислав 28 уровень
4 ноября 2020, 06:56
code: в методе doWork(Person person): Я: всё решил
if (person instanceof Person.Loser)
           new Person.Loser().doNothing();
Валидатор:😈 Для каждой корректной user, ... Я: Но всё же работает!😢 Валидатор: 😈 ... введенной строки должен быть вызван метод doWork.. Я: НО!..😥 Валидатор:😈 .. loser..coder, proger) введенной строки Я:😠
if (person instanceof Person.Loser){
            Person.Loser loser= (Person.Loser) person;
            loser.doNothing();
        }
Валидатор: Ну вот теперь всё в порядке.😇
Olja Horoshilova 19 уровень, Москва
16 ноября 2020, 19:05
Я только после вашей подсказки решила. Не видела такую запись Person.Loser раньше, а без нее не пропускал....
Ivan Shcherabakov 16 уровень, Минск
29 ноября 2020, 19:56
у меня проканало так: if(person instanceof User){ ((User) person).live(); а дальше по такому же принципу.
AlexS 17 уровень
17 декабря 2020, 07:16
@Ivan Shcherabakov спасибо за подсказку, получилось решить!