Что здесь может пойти не так?
Переписал метод askOperation():
public static Operation askOperation() throws IOException {
ConsoleHelper.writeMessage("Выберите операцию:");
for (Operation operation : Operation.values()) {
StringBuilder askBuilder = new StringBuilder();
askBuilder.append(operation.ordinal())
.append(" - ")
.append(operation.getDescription());
ConsoleHelper.writeMessage(askBuilder.toString());
}
int enteredNumber = ConsoleHelper.readInt();
return Operation.values()[enteredNumber];
}
И enum Operation:
public enum Operation {
CREATE("упаковать файлы в архив"),
ADD("добавить файл в архив"),
REMOVE("удалить файл из архива"),
EXTRACT("распаковать архив"),
CONTENT("просмотреть содержимое архива"),
EXIT("выход");
private String description;
Operation(String description) {
this.description = description;
}
public String getDescription() {
return description;
}
}
Проблему это не решило. Будем дальше бить в бубен, жалко только, что нет возможности бить в бубен тому кто писал эту задачу.
Спойлер (принятое решение):
public static void main(String[] args) throws Exception {
Operation operation = null;
do {
try {
operation = askOperation();
CommandExecutor.execute(operation);
} catch (WrongZipFileException e) {
ConsoleHelper.writeMessage("Вы не выбрали файл архива или выбрали неверный файл.");
} catch (Exception e) {
ConsoleHelper.writeMessage("Произошла ошибка. Проверьте введенные данные.");
}
} while (operation != Operation.EXIT);
}
package com.javarush.task.task31.task3110;
import com.javarush.task.task31.task3110.exception.WrongZipFileException;
import java.io.IOException;
public class Archiver {
public static void main(String[] args) throws Exception {
Operation operation;
while (true) {
try {
operation = askOperation();
if (operation.equals(Operation.EXIT)) {
break;
}
CommandExecutor.execute(operation);
} catch (WrongZipFileException e) {
ConsoleHelper.writeMessage("Вы не выбрали файл архива или выбрали неверный файл.");
} catch (Exception e) {
ConsoleHelper.writeMessage("Произошла ошибка. Проверьте введенные данные.");
}
}
CommandExecutor.execute(Operation.EXIT);
}
public static Operation askOperation() throws IOException {
Operation[] requiredOperation = Operation.values();
String lineSeparator = System.lineSeparator();
String message = "0 - упаковать файлы в архив" + lineSeparator +
"1 - добавить файлы в архив" + lineSeparator +
"2 - удалить файл из архива" + lineSeparator +
"3 - распаковать архив" + lineSeparator +
"4 - просмотреть содержимое архива" + lineSeparator +
"5 - выход";
int choice;
ConsoleHelper.writeMessage("Выберете операцию:");
ConsoleHelper.writeMessage(message);
choice = ConsoleHelper.readInt();
if (choice < 0 || choice >= requiredOperation.length) {
throw new IOException();
}
return requiredOperation[choice];
}
}
Ну там чиорт его знает, валидатор - разум искусственный. Возможно, он действительно при тесте меняет enum, у EXIT оказывается другой номер, не тот, который запрашивает askOperation => вывод не соответствует ожидаемому => фейл. В мейне я не увидел ничего, за что можно было бы зацепиться. Ну разве что если опечатался в выводе, куда нить латинскую букву воткнул.Тормоз я, сначала написал, потом обновил страницу и увидел решение