[EXERCISES] Lists and Complexity- Problem {6} - Reversed List
Здравейте колеги,
може ли някой да погледне и да помогне с намирането на грешката. Гърми ми 5ти тест.
Здравейте колеги,
може ли някой да погледне и да помогне с намирането на грешката. Гърми ми 5ти тест.
На пръв поглед забелязвам следните неща:
1. Името на тази статична променлива е като за константа, но не я използваш като такава в кода си и от там идват поне част от проблемите:
private static int INITIAL_CAPACITY = 2;
Пример:
Какво, ще отпечата следната демо програма на конзолата?
public class Demo {
public static void main(String[] args) {
ReversedList<Integer> reversedList = new ReversedList<>(4);
System.out.println(reversedList.capacity());
ReversedList<Integer> reversedList2 = new ReversedList<>();
System.out.println(reversedList2.capacity());
}
}
По условие би трябвало да бъде 4 и 2, но ще получим 4 и 4.
Още "по-забавно" става, когато инстанциите на класа започнат да се преоразмеряват и да презаписват статичното INITIAL_CAPACITY, което се използва едновременно от всички.
За справяне с проблема най-правилно е да имаме още едно поле в класа - напр. capacity.
2. Конструктори:
public ReversedList(int capacity) {
INITIAL_CAPACITY = capacity;
new ReversedList();
}
public ReversedList() {
count = 0;
elements = (T[]) new Object[INITIAL_CAPACITY];
}
Първият конструктор със сигурност не работи така, както си очакваш
Това, което се случва е следното:
Това, което най-вероятно си имал предвид е да извикаш дефолтния конструктор за да инициализираш обекта.
Това става с this() :
public ReversedList(int capacity) {
INITIAL_CAPACITY = capacity;
this();
}
Това е кода с горните корекции - не съм го проверявал в Judge, че не мога да се ориентирам какво да събмитна там
Здравей,
както винаги помогна супер много!
Позабравил съм ги нещата след 4-5 месеца само JS... Ако бях се сетил да проверя с нещо като демото ти щяха да излязат нещата :)
Благодаря отново!