У вас есть код программы MovieFactory, разберитесь, что она умеет делать. Добавьте классы Cartoon, Thriller и разберитесь, как мы получаем объект класса SoapOpera по ключу "soapOpera".
Вы не можете решать эту задачу, т.к. не залогинены.
+99
Комментарии (395)
популярные
новые
старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
А еще на мой взгляд читать код приятней когда в условие цикла не заложено какое-то длинное выражение, а просто фраза которая четко описывает в каком случае продолжаем цикл, например:
boolean isKeyCorrect =true;while(isKeyCorrect){
key = reader.readLine();Movie movie =MovieFactory.getMovie(key);if(key.matches("soapOpera|cartoon|thriller")){System.out.println(movie.getClass().getSimpleName());}else{
isKeyCorrect =false;}}
Соглашусь с одним из ранних комментаторов, который писал, будто тут намеренно учат плохим паттернам. Один из примеров в данной задаче - для чего вообще передавать значение null в метод getMovie() класса MovieFactory, если такие случаи нужно отлавливать как можно раньше?
Но если сделать проверку на null в цикле, вместе с вызовом метода MovieFactory.getMovie(), то и выбрасывать исключение не будет, произойдет завершение программы.
Я один через ArrayList решаю?)) Через валидатор еще не проверял, но работает правильно. Коплю по 20 решенных задач, потом проверяю в один день, собираю ачивки))
publicclassSolution{publicstaticvoidmain(String[] args)throwsException{Scanner console =newScanner(System.in);String movieString;ArrayList<String> moviesList =newArrayList<>(Arrays.asList("cartoon","thriller","soapOpera"));ArrayList<String> addMoviesList =newArrayList<>();while(true){
movieString = console.nextLine();if(moviesList.contains(movieString)){
addMoviesList.add(movieString);}if(!moviesList.contains(movieString)){MovieFactory.getMovie(movieString);
console.close();break;}}
addMoviesList.forEach(movie ->MovieFactory.getMovie(movie));}staticclassMovieFactory{staticMoviegetMovie(String key){Movie movie =null;if("soapOpera".equals(key)){
movie =newSoapOpera();System.out.println(movie.getClass().getSimpleName());}if("cartoon".equals(key)){
movie =newCartoon();System.out.println(movie.getClass().getSimpleName());}if("thriller".equals(key)){
movie =newThriller();System.out.println(movie.getClass().getSimpleName());}return movie;}}staticabstractclassMovie{}staticclassSoapOperaextendsMovie{}staticclassCartoonextendsMovie{}staticclassThrillerextendsMovie{}}
Тоже ArrayList использовал, но в него складывал объекты movie - те что не равны null (по условию задачи, как оказалось, надо вызвать метод getMovie() даже для некорректной строки ввода), потом в foreach выводил имена классов. Валидатор пропустил.
Какую бы мы строку не ввели она передается в класс MovieFactory и вызывает ее метод getMovie(key). В методе если swich не находит эквивалентных значений то присваивает Movie movie = null, и возвращает в цикл wile, где далее идет проверка на (movie == null). Те можно не делать свою проверку в цикле while.
return сам по себе вызовет метод "MovieFactory.getMovie(key);" с некорректной строкой, но не выведет его на экран и завершит работу метода мэйн, оператор return всегда что-то возвращает и завешает работу метода.
staticclassMovieFactory{staticMoviegetMovie(String key){Movie movie =null;if("soapOpera".equals(key)){
movie =newSoapOpera();}elseif("cartoon".equals(key)){
movie =newCartoon();}elseif("thriller".equals(key)){
movie =newThriller();}return movie;}}
Вернет этот null, соответственно предпоследнему требованию, завершит программу и ничего
в консоль не выведется.
break прерывает цикл, return прерывает метод/ выходит из метода (в нашем случае метод main). Соответственно, если после цикла есть какой-то код, то в случае с break, он выполнится, в случае с return - нет, т.к. программа выйдет из метода. Например,
Выполнится:
while(true){//какая-то логикаbreak;}System.out.println("Данный код выполнится после break");
Не выполнится:
while(true){//какая-то логикаreturn;}System.out.println("Данный код не выполнится после return");
Хочу тебя, коллега, предупредить.
Валидатор не примет решение, если твоя прога при вводе "некорректной" строки, кидает NullPointerException.
Рекомендую проверять корректность введенной строки не так, как ты себе это представляешь (в цикле while), а проверять тот объект, который будет создан на основании этой "некорректоной строки".
Расшифровывать не буду ибо спойлеры.
+2
Этот веб-сайт использует данные cookie, чтобы настроить персонально под вас работу сервиса. Используя веб-сайт, вы даете согласие на применение данных cookie. Больше подробностей — в нашем Пользовательском соглашении.
переломать ногисказать спасибо тому кто писал условия задачи и комментарии внутри программы ?