MovieFactory
Расширение функционала по аналогии, чтение с консоли:

1. Разобраться, что программа умеет делать.
2. Все классы должны быть внутри класса Solution.
3. Добавить классы Cartoon, Thriller.
4. Разобраться, как мы получаем объект класса SoapOpera по ключу «soapOpera«.

Аналогично получению объекта SoapOpera сделать:

5. Добавить в MovieFactory.getMovie получение объекта Cartoon для ключа «cartoon«.

6. Добавить в MovieFactory.getMovie получение объекта Thriller для ключа «thriller«.

7. Считать с консоли несколько ключей (строк).

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

8. Создать переменную movie класса Movie и для каждой введенной строки(ключа):

8.1. Получить объект используя MovieFactory.getMovie и присвоить его переменной movie.

8.2. Вывести на экран movie.getClass().getSimpleName().

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;
        while (true)
        {
            key = reader.readLine();
            if (key.equals("cartoon")||key.equals("thriller")||key.equals("soapOpera"))
            {
                Movie movie = MovieFactory.getMovie(key);
                System.out.println(movie.getClass().getSimpleName());
            }
            else
                break;
        }
    }

    static class MovieFactory {

        static Movie getMovie(String key) {
            Movie movie = null;

            if ("soapOpera".equals(key)) {
                movie = new SoapOpera();
            }
            if ("cartoon".equals(key)){
                movie = new Cartoon();
            }
            if ("thriller".equals(key)){
                movie = new Thriller();
            }

            return movie;
        }
    }

    static abstract class Movie {}

    static class SoapOpera extends Movie {}

    static class Cartoon extends Movie {}

    static class Thriller extends Movie {}
}

задан 08 Фев '17, 11:55

Intoxicator's gravatar image

Intoxicator
344
одобрено: 16%

изменено 08 Фев '17, 14:20

задание?

(08 Фев '17, 11:57) vampirit

Выполнил задачу с 38 попытки.=) Оказалось надо вызвать метод getMovie() для !каждой введенной строки, только после проверять на эквивалентность(если строки эквивалентны, то вывести на экран имя класса, иначе остановить цикл ввода строк).

ссылка

опубликован 24 Фев '17, 16:02

Intoxicator's gravatar image

Intoxicator
344
одобрено: 16%

А классы почему статические? Ну и по идее не мешало бы их публичными сделать, может и нет, но попробуйте

ссылка

опубликован 08 Фев '17, 12:38

vampirit's gravatar image

vampirit
9.8k19
одобрено: 34%

изменено 08 Фев '17, 12:39

Попробовал публичными сделать, не помогло, все также не проходит тестирование.... Пытался что-то менять в цикле по вводу ключа, на аналогичный вариант (пробовал цикл for, ставил условие от обратного, создавал переменную Movie movie перед циклом ввода(что не нарушало результат работы кода)). P.S. Классы статические, т.к. в методе Movie getMovie(String key), когда ссылка movie начинает ссылаться на объект не статического класса, выдает ошибку...

(08 Фев '17, 14:40) Intoxicator

static нужно убрать, так как он инициализирует класс и его конструктор сразу при запуске программы. А ключ приходит уже только после считывания данных с консоли, так что конструктор не отрабатывает.

ссылка

опубликован 08 Фев '17, 14:26

danilishe's gravatar image

danilishe
556
одобрено: 3%

Когда убираю static код не компилируется.

(08 Фев '17, 14:47) Intoxicator

Blockquote

Выполнил задачу с 38 попытки.=) Оказалось надо вызвать метод getMovie() для !каждой введенной строки, только после проверять на эквивалентность(если строки эквивалентны, то вывести на экран имя класса, иначе остановить цикл ввода строк).

Blockquote Спасибо большое за ваш комментарий, была та же проблема. Код работает, а валидатор не пропускает. Нельзя так издеваться над учениками, на лёгкой задаче потратил 3 часа только из-за того, что вызвал метод getMovie() после проверки на соответствие ключа, хотя так было бы логичней. Оказывается его нужно вызывать для любой строки кода. Но что в итоге меняется?

ссылка

опубликован 21 Янв, 15:38

sashashtmv's gravatar image

sashashtmv
304
одобрено: 0%

Ваш ответ
включить просмотр

Следить за вопросом

По Email:

После авторизации вы сможете подписаться на любые обновления здесь

Основы Markdown

  • *italic* or _italic_
  • **bold** or __bold__
  • ссылка:[текст](http://url.com/ "заголовок")
  • изображение?![alt текст](/path/img.jpg "заголовок")
  • нумерованный список: 1. Foo 2. Bar
  • Для того чтобы добавить разрыв строки просто добавьте два пробела.
  • основные HTML тэги, также поддерживаются

Тэги:

×5

Задан: 08 Фев '17, 11:55

Просмотров: 1,634 раз

Отредактирован: 21 Янв, 15:38