У меня есть структура данных LinkedList, которую я использую для хранения некоторых элементов. Этот вопрос является частью курса, который требует от меня использования стандартного java .utils LinkedList. Основной сценарий c заключается в том, чтобы иметь возможность добавлять книги и словари в LinkedList, а затем удалять их. Вопрос, на котором я застрял, требует сортировки LinkedList, чтобы все словари были в конце LinkedList, а книги - в начале.
Вот мой текущий код для сортировки элементов:
public static void moveDictionaries(Bookshelf b){
int size = b.bookshelf.size();
for(int i = 0; i<b.size(); i++) {
Book temp = b.bookshelf.get(i);
if(temp instanceof Dictionary){
b.bookshelf.remove(temp);
b.bookshelf.add(size - 1, temp);
}
}
}
Словарь - это подкласс Book. Что я делаю, это использую для l oop, чтобы перебрать список. Я проверяю, является ли текущий элемент словарём, и если да, то добавляю его в конец LinkedList, используя размер в качестве позиции для добавления. Затем я удаляю элемент из LinkedList. Вот мой класс Книжной полки:
public class Bookshelf {
List<Book> bookshelf = new LinkedList<Book>();
public int size(){
return bookshelf.size();
}
public void addBookOnLeftSide(Book b){
bookshelf.add(b);
}
public void addBook(int i, Book b){
bookshelf.add(i, b);
}
public Book remove(int i){
Book temp = bookshelf.get(i);
bookshelf.remove(i);
return temp;
}
public void printLR(){
for(int i = 0; i < bookshelf.size(); i++){
System.out.println(bookshelf.get(i).toString());
}
}
public void printRL(){
for(int i = bookshelf.size() - 1; i>=0; i--){
System.out.println(bookshelf.get(i).toString());
}
}
}
И, наконец, мой основной класс, где я его тестирую:
public static void main(String[] args) {
Book bookOne = new Book(101, "Hello");
Book bookTwo = new Book(102, "Bye");
Book bookThree = new Book(103, "Morning");
Dictionary dictionaryOne = new Dictionary("104", "Afternoon", 10, "English", "Spanish", 10);
Dictionary dictionaryTwo = new Dictionary("105", "Evening", 10, "English", "Spanish", 10);
Bookshelf bookshelf = new Bookshelf();
bookshelf.addBookOnLeftSide(dictionaryOne);
bookshelf.addBookOnLeftSide(bookOne);
bookshelf.addBookOnLeftSide(bookThree);
bookshelf.addBookOnLeftSide(dictionaryTwo);
bookshelf.addBookOnLeftSide(bookTwo);
moveDictionaries(bookshelf);
bookshelf.printLR();
}
Проблема, с которой я сталкиваюсь, заключается в том, что при запуске этого метода не работает, как ожидалось. Он перемещает только один из словарей, а другой почему-то пропадает. Я не уверен, почему это происходит. Любая помощь будет великолепна.