JavaRush
Акция
Университет
Java FullStack
Python FullStack
new
Web FullStack
new
Обучение
Курсы
Задачи
Опросы
Игры
Помощь
График пинков
Стажировка
Сообщество
Пользователи
Форум
Чат
Статьи
Истории успеха
Активности
Отзывы
Подписки
Светлая тема
Вопрос
  • Отзывы
  • О нас
  • CS50
Начать
Начать обучение
Начать обучение
  • Все вопросы
JavaRush/Помощь по Java задачам/подскажите плиз где у меня бесконечный цикл происходит???...
Антон Никифоров
29 уровень
  • 31.03.2022
  • 337просмотров
  • 5комментариев

подскажите плиз где у меня бесконечный цикл происходит???

Вопрос по задаче MovieFactory
Java Core,  4 уровень,  8 лекция
Обсуждается


У нас есть кинофабрика, но она работает не в полную силу.
Давай расширим ее функционал по аналогии с тем, что уже есть, и добавим чтение с консоли.
Вот что тебе нужно сделать для успешного решения:

  1. Разобраться, что программа умеет делать.
  2. Все классы должны быть внутри класса Solution.
  3. Добавить классы Cartoon, Thriller.
  4. Разобраться, как мы получаем объект класса SoapOpera по ключу "soapOpera".
  5. Аналогично получению объекта SoapOpera сделать:
    • добавить в MovieFactory.getMovie получение объекта Cartoon для ключа "cartoon".
    • добавить в MovieFactory.getMovie получение объекта Thriller для ключа "thriller".
  6. Считать с консоли несколько ключей (строк).

    Важно: ввод заканчивается, как только вводится строка не совпадающая с одной из: "cartoon", "thriller", "soapOpera".

  7. Создать переменную movie типа Movie и для каждой введенной строки (ключа):
    • получить объект используя MovieFactory.getMovie и присвоить его переменной movie.
    • вывести на экран movie.getClass().getSimpleName().

Требования:
  • Классы Cartoon и Thriller должны быть статическими и существовать внутри класса Solution.
  • Метод MovieFactory.getMovie должен возвращать объект типа Cartoon при передаче ему строки "cartoon" в качестве параметра.
  • Метод MovieFactory.getMovie должен возвращать объект типа Thriller при передаче ему строки "thriller" в качестве параметра.
  • Метод main должен считывать строки с клавиатуры.
  • Метод main должен прекращать считывать строки с клавиатуры, если была введена некорректная строка (не "cartoon", не "thriller" или не "soapOpera").
  • Для каждой введенной строки (в том числе для некорректной) необходимо вызвать метод MovieFactory.getMovie().
  • Для всех введенных корректных строк необходимо вывести на экран простые имена (movie.getClass().getSimpleName()) типов объектов, возвращаемых методом MovieFactory.getMovie().
package com.javarush.task.task14.task1414; import java.io.BufferedReader; import java.io.InputStreamReader; public class Solution { public static void main(String[] args) throws Exception { BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); String key = reader.readLine(); while (true) { Movie movie = null; movie = MovieFactory.getMovie(key);//выполняю это условие Для каждой введенной строки (в том числе для некорректной) необходимо вызвать метод MovieFactory.getMovie(). if (!key.equals("cartoon") && !key.equals("thriller") && !key.equals("soapOpera")) { break;//Метод main должен прекращать считывать строки с клавиатуры, если была введена некорректная строка (не "cartoon", не "thriller" или не "soapOpera"). } else if (key.equals("cartoon") ||key.equals("thriller") || key.equals("soapOpera")) { System.out.println(movie.getClass().getSimpleName()); } } //ввести с консоли несколько ключей (строк), пункт 7; /* 8 Создать переменную movie класса Movie и для каждой введенной строки(ключа): 8.1 получить объект используя MovieFactory.getMovie и присвоить его переменной movie 8.2 вывести на экран movie.getClass().getSimpleName() */ } static class MovieFactory { static Movie getMovie(String key) { Movie movie = null; //создание объекта SoapOpera (мыльная опера) для ключа "soapOpera" if ("soapOpera".equals(key)) { movie = new SoapOpera(); } else if ("cartoon".equals(key)) { movie = new Cartoon(); } else if ("thriller".equals(key)) { movie = new Thriller(); } //напишите тут ваш код, пункты 5,6 return movie; } } static abstract class Movie { } static class SoapOpera extends Movie { } static class Cartoon extends Movie { } static class Thriller extends Movie { } //Напишите тут ваши классы, пункт 3 }
0
Комментарии (5)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Grock
Уровень 44
26 сентября 2022, 09:11
Строка ниже:
reader.readLine();
должна быть внутри цикла, а у тебя снаружи. Т.е. если ты ввел верное ключевое слово, оно передается в цикл while (с вечным true) и там дело никогда не дойдет до break (слово-то верное) и будет вечно выполняться else-if.
+1
Антон Никифоров
Уровень 29
4 апреля 2022, 15:07
спасибо за помощь!!!
0
Борис МоскалевBackend Developer в Прикладные технологи
1 апреля 2022, 18:36
привет. зачем вообще эта сложная проверка ключа после вызова фабрики. у тебя фабрика возвращает null если ключ не подошел. останавливай цикл если movie равно null и все
0
Антон Никифоров
Уровень 29
1 апреля 2022, 09:00
c "или" тоже не срабатывает , не могу понять что не так. Где то


я туплю не не могу понять где?
0
Никита
Уровень 31
Expert
31 марта 2022, 17:30
Так надо использовать "ИЛИ" а не "И"
0
Обучение
  • Курсы программирования
  • Регистрация
  • Курс Java
  • Помощь по задачам
  • Цены
Сообщество
  • Пользователи
  • Статьи
  • Форум
  • Чат
  • Истории успеха
  • Активности
Компания
  • О нас
  • Контакты
  • Отзывы
  • FAQ
  • Поддержка
JavaRushJavaRush — это интерактивный онлайн-курс по изучению Java-программирования c нуля. Он содержит 1200 практических задач с проверкой решения в один клик, необходимый минимум теории по основам Java и мотивирующие фишки, которые помогут пройти курс до конца: игры, опросы, интересные проекты и статьи об эффективном обучении и карьере Java‑девелопера.
Подписывайтесь
Язык интерфейса
Русский
English Українська
"Программистами не рождаются" © 2026 JavaRush
MastercardVisa
"Программистами не рождаются" © 2026 JavaRush