Archiver (8)

  • 14
  • Недоступна
Чтобы узнать какую команду сейчас хочет выполнить пользователь, добавим метод Operation askOperation() в класс Archiver. Этот метод должен вывести в консоль список доступных команд и попросить выбрать одну из них. Для удобства будем просить ввести номер команды, где номер – это порядковый номер кома
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (44)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий вы должны авторизоваться
Anton36 уровень, Москва
10 июня 2018, 04:27
Не понял. Не принимало пока не удалил из мэйн где мы спрашиваем путь к архиву. А как же мы это узнаем то, епт??? Голову сломал пока это делал. Тьфу.
Vitaly Khan35 уровень
8 января, 11:27
да, многие на этом накололись. следует написать более явно - "Переписываем с нуля метод main..." я тоже оставил ранее написанный код...
Алексей30 уровень
воскресенье, 11:59
Подсказка кроется в содержании старого мейна. Там используется Систем.аут, а нам сказано везде использовать КонсольХелпер, если не указано обратного. Но сам перед сдачей, на всякий случай зашел сюда, чтобы убедиться в своей теории )
Anonimus1506331 уровень
11 февраля 2018, 11:43
Самое компактное решение:
return Operation.values()[ConsoleHelper.readInt()];
18 апреля 2018, 13:48
Да, если кто не вышел за пределы массива, или не нажал отличный от цифры символ
Александр31 уровень, Москва
25 апреля 2018, 13:40
Если кто-то это сделает, выпадет исключение, мы его обработаем и попросим еще раз ввести число. Так что ничего страшного.
Ярослав40 уровень, Днепр
11 июля 2018, 19:04
Сделал так же сам, только сделал статический импорт всего внутри ConsoleHelper, так что у меня получилось еще компактнее: return Operation.values()[readInt()];
Rihard198533 уровень
10 сентября 2018, 10:51
Кто нибудь объяснит откуда квадратные скобки ,что то никак не въезжаю((
Creilyss40 уровень
10 сентября 2018, 22:01
Operation.values() возвращает массив состоящий из элементов Operation. Соответсвенно квадратные скобки это обращение к элементу массива. Если ещё подробнее, то
return Operation.values()[readInt()];
можно расписать как
Operation[] possibleOperations = Operation.values();
int userOperation = readInt();
return possibleOperations[ userOperation ];
Rihard198533 уровень
10 сентября 2018, 23:45
Creilyss спасибо тебе, только сейчас въехал))) Блин все так просто)) Просто не мог понять вот такое сочетание
()[]
оказывается массив возвращается и соотвественно номер согласно методу
Дмитрий Корнеенко35 уровень, Минск
27 ноября 2017, 12:56
Для тех, у кого проблема с пониманием русского языка и отображением правильного образа: ПЕРЕПИШИ - не значит ДОПИШИ, ИЛИ вот так ПЕРЕПИШИ!=ДОПИШИ
Наталья35 уровень, Санкт-Петербург
21 июля 2018, 17:43
Тут именно даже не "перепиши", а "с нуля напиши"..
askir40 уровень
5 ноября 2017, 06:23
Классно получилось поместить названия команд в Operation
public enum Operation {
    CREATE("упаковать файлы в архив"),
    ADD("добавить файл в архив"),
    REMOVE("удалить файл из архива"),
    EXTRACT("распаковать архив"),
    CONTENT("просмотреть содержимое архива"),
    EXIT("выход");

    private String comment;

    Operation(String comment) {
        this.comment = comment;
    }

    @Override
    public String toString() {
        return comment;
    }
}
И вывод меню упростился
for(Operation operation : Operation.values())
    ConsoleHelper.writeMessage(String.format("%s - %s", operation.ordinal(), operation));
Alexey Smirnov29 уровень, Москва
9 ноября 2017, 11:30
Здорово придумано, но валидатор проявил тут необычную терпимость, толерантность и студентофилию.
Евгений Шипов40 уровень, Москва
18 января 2018, 21:14
Сделал также, только вывод через java 8.
Stream.of(Operation.values())
                .forEach(operation -> ConsoleHelper.writeMessage(String.format("\t %d - %s", operation.ordinal(), operation.getDescription())));
Иван41 уровень, Москва
18 апреля 2018, 16:42
Круто! Даже полез разбираться чтобы понять что это и как это :) Тоже добавил себе это поле, но сделал вывод комментария через геттер для поля коммент чтобы не пересечься с возможно другим использованием toString
Павел41 уровень, Санкт-Петербург
14 августа 2018, 15:28
Сделал так же, а на следующем шаге валидатор всё затёр своим говнокодом.
Max Miheev36 уровень, Москва
7 ноября 2018, 16:16
спасибо большое ! очень красивое и лаконичное использование Enum ! прям буду тоже использовать ! всех благ тебе, добрый человек!
Max Miheev36 уровень, Москва
7 ноября 2018, 16:19
а реально прикольно. задача выполнена обновилась и .... странный индусский код ))))) который я по началу и писал...
Arsenii Tolmachev35 уровень, Ottawa
4 ноября 2017, 22:57
Встречал такой вариант на сайте Оракла. Тут он прошел.
for(;;){
             if()
             break;
          }
Сергей40 уровень
18 октября 2017, 00:33
CommandExecutor.execute() должен идти сразу за askOperation() в блоке try/catch
Danil Gordeev35 уровень
22 сентября 2017, 19:39
приняло без переписывания main. в цикле сделал проверку на
(operation != Operation.EXIT)
Маша Малыгина35 уровень
31 июля 2017, 07:00
Сергей Пыров ++++)) (Метод main должен быть полностью(!) написан заново. Т.е. закоментируйте или сотрите все, что было в нем до этого (лучше закоментить для себя) - внимательнее, а то, пока пишешь, забываешь что это надо удалить)
Сергей Пыров35 уровень, Санкт-Петербург
21 июня 2017, 16:00
Интересная подзадача... В общем для тех кто застрянет - проверяйте следующее: 1 Метод main должен быть полностью(!) написан заново, согласно условию. Т.е. закоментируйте или сотрите все, что было в нем до этого (лучше закоментить для себя) 2 Всю выводящую информацию в консоль только через ConsoleHelper.writeMessage() 3 CommandExecutor.execute() должен идти сразу за askOperation() в блоке try/catch 4 Все сравнения Operation и enum только(!) через == 5 В try/catch должно быть 2(!) catch 6 В "каноничном" решении, которое потом само появляется идет цикл do / while, пока (operation != Operation.EXIT), но у меня проскочила с while(true) и брейком в if. Но не забудьте тогда инициализировать operation = null. Хотя этот момент Идея сама должна подсказать.
foo28 уровень
7 августа 2017, 22:28
спасибо!
Alexey Smirnov29 уровень, Москва
9 ноября 2017, 11:29
А я не инициализировал null, я инициализировал askOperation()
Александр Михалев40 уровень, Москва
23 марта 2018, 12:54
> 1 Метод main должен быть полностью(!) написан заново Мда)) После этой подсказки сразу прошел валидацию :D
NastyaGermanovich35 уровень, Санкт-Петербург
16 апреля 2018, 23:02
У меня прошло с 3мя catch ( не удаляла на IOException), сравнение делала через equals, в методе Operation askOperation() пользовалась switch ! так что все относительно)
Сергей36 уровень, Москва
23 июля 2018, 07:30
я не инициализировал перед циклом, while(true), выход по if п.с. потом только заметил, мне валидатор заменил файлы на do-while и инициализировал null'ом
Сергей36 уровень, Москва
23 июля 2018, 07:37
два catch WrongZipFileException Exception
Максим34 уровень, Москва
9 сентября 2018, 22:47
Может кому-нибудь поможет, в цикле while(true) сначала идет askOperation() затем CommandExecutor.execute(), затем для catch и только потом break по Operation.EXIT
Knastnt31 уровень
6 ноября 2018, 05:34
9 попыток, Карл! Валидатор: Перепиши метод main согласно заданию. (Если произойдет любое исключение кроме WrongZipFileException выведи сообщение "Произошла ошибка. Проверьте введенные данные.") Оказалось вместо
while (true){
           ...
               if(operation == Operation.EXIT) break;
Нужно было использовать
while (operation != Operation.EXIT){
10 января, 14:59
Плюсую )) Потратив 4-ую попытку сдался, пошел читать комментарии. Валии жжет.
Evgeniy Vishnevskiy33 уровень, Минск
6 марта, 20:03
принял с while(true) помог коммент Максима: Может кому-нибудь поможет, в цикле while(true) сначала идет askOperation() затем CommandExecutor.execute(), затем для catch и только потом break по Operation.EXIT
Олег Свидунов37 уровень, Днепр
16 июня 2017, 21:56
main приняло только через do - while
Сергей36 уровень, Москва
23 июля 2018, 07:32
можно while(true), просто ты обязан выполнить операции, даже exit, а потом проверять на выход п.с. потом только заметил, мне валидатор заменил файлы на do-while и инициализировал null'ом