Немного не пойму, что именно не нравится валидатору. Особенно интересен пункт 3, в котором он ругается на изменение метода Column.configureColumns, который я не менял. После проверки я сбросил задачу, копировал тело метода и вставил в IDEA, чтобы гарантированно он не был изменен. После этого вылезает та же ошибка.
Результат выводится корректный, поэтому не могу понять, что хочет от меня валидатор.
package com.javarush.task.task25.task2503;
import java.util.LinkedList;
import java.util.List;
public enum Column implements Columnable{
Customer("Customer"),
BankName("Bank Name"),
AccountNumber("Account Number"),
Amount("Available Amount");
private String columnName;
private static int[] realOrder;
private Column(String columnName) {
this.columnName = columnName;
}
/**
* Задает новый порядок отображения колонок, который хранится в массиве realOrder.
* realOrder[индекс в энуме] = порядок отображения; -1, если колонка не отображается.
*
* @param newOrder новая последовательность колонок, в которой они будут отображаться в таблице
* @throws IllegalArgumentException при дубликате колонки
*/
public static void configureColumns(Column... newOrder) {
realOrder = new int[values().length]; // инициализируем массив realOrder новым массивом размером с колисечтво элементов enum Column
for (Column column : values()) { // запускаю цикл для всех элементов enum, элементы массива realOrder с индексом порядкового номера enum равны -1, то есть по условию задачи они не отображаются;
realOrder[column.ordinal()] = -1;
boolean isFound = false; // устанавливаю boolean isFound значение false
for (int i = 0; i < newOrder.length; i++) { // для каждого значения переданного массива колонок (значенией enum) newOrder ьы запускаем цикл
if (column == newOrder[i]) { // если колонка из нашего действующего массива равна колонке из переданного в параметрах массива, мы проверяем isFound
if (isFound) {
throw new IllegalArgumentException("Column '" + column.columnName + "' is already configured."); // если isFound = true, то викидывается исключение с текстом
}
realOrder[column.ordinal()] = i; // в другом случае заносим в realOrder под индексом рассматриваемого enum значение i, т.е. значение из переданного в парамеертах enum
isFound = true; // так как значение найдено и занесено в новый список с порядком отображения, переводим isFound в true, чтобы при посторном совпадении данные в массиве не задублировались и было брошено исключение
}
}
}
}
/**
* Вычисляет и возвращает список отображаемых колонок в сконфигурированом порядке (см. метод configureColumns)
* Используется поле realOrder.
*
* @return список колонок
*/
public static List<Column> getVisibleColumns() {
List<Column> result = new LinkedList<>();
Column[] array = Column.values();
for (int i = 0; i < realOrder.length; i++) {
result.add(null);
}
for (int i = 0; i < realOrder.length; i++) {
if (realOrder[i] != -1) {
result.set(realOrder[i], array[i]);
}
}
for (int i = 0; i<result.size(); i++){
if (result.get(i) == null){
result.remove(i);
}
}
return result;
}
/**
* @return полное имя колонки
*/
@Override
public String getColumnName() {
return this.columnName;
}
/**
* Возвращает true, если колонка видимая, иначе false
*/
@Override
public boolean isShown() {
if (realOrder[this.ordinal()] != -1) return true;
else return false;
}
/**
* Скрывает колонку - маркирует колонку -1 в массиве realOrder.
* Сдвигает индексы отображаемых колонок, которые идут после скрытой
*/
@Override
public void hide() {
realOrder[this.ordinal()] = -1;
}
}