Проблемы с итераторами Java и интерфейсом Position<E>. Как я могу отправить свой объект Iterator как тип данных Position ⇐ JAVA
Проблемы с итераторами Java и интерфейсом Position<E>. Как я могу отправить свой объект Iterator как тип данных Position
Я составляю очень стандартный позиционный список и работаю с итераторами. Я пытаюсь использовать итератор для перебора моего списка и добавления элемента между позициями. Мой метод addBefore() принимает 2 параметра: (Position p, E e)
Я создал свой объект Iterator и начал перебирать список, и я хочу вставить элемент прямо перед тем местом, где сейчас находится мой итератор. Я пытаюсь отправить свой итератор в качестве параметра, но моя структура данных не позволяет этого, поскольку он не относится к типу Position.
Есть ли способ привести переменную Iterator к переменной Position, чтобы я мог выполнить операцию? Или какое-то другое решение?
Все помогает. Спасибо.
Вот код, с которым я работаю:
публичный интерфейс Position { // Возвращает элемент, хранящийся в этой позиции. E getElement() выдает исключение IllegalStateException; } import java.util.Iterator; импортировать java.util.NoSuchElementException; публичный класс LinkedPositionalList реализует PositionalList { // вложенный класс узла частный статический класс Node реализует Position { частный элемент E; // ссылка на элемент, хранящийся в этом узле частный Node предыдущая; // ссылка на предыдущий узел в списке частный Node следующий; // ссылка на следующий узел в списке public Node(E e, Node p, Node n) { элемент = е; предыдущий = р; следующий = п; } public E getElement() выдает IllegalStateException { если (следующий == ноль) throw new IllegalStateException("Позиция больше не действительна"); возвратный элемент; } общественный Node getPrev() { вернуть предыдущую; } общественный Node getNext() { вернуться следующим; } общественный недействительный setElement (E e) { элемент = е; } public void setPrev(Node p) { предыдущий = р; } public void setNext(Node n) { следующий = п; } } // конец вложенного класса Node // переменные экземпляра LinkedPositionalList частный заголовок Node; // страж заголовка частный трейлер Node; // страж трейлера частный размер int = 0; // количество элементов в списке // Создает новый пустой список. общественный LinkedPositionalList() { заголовок = новый узел(ноль, ноль, ноль); // создаем заголовок трейлер = новый узел(ноль, заголовок, ноль); // трейлеру предшествует заголовок header.setNext(трейлер); // за заголовком следует трейлер } // частные коммунальные услуги // Проверяет позицию и возвращает ее как узел. частный Node validate(Position p) выдает IllegalArgumentException { if (!(p экземпляр узла)) throw new IllegalArgumentException("Invalid p"); Node node = (Node) p; если (node.getNext() == ноль) throw new IllegalArgumentException("p больше нет в списке"); возвратный узел; } // Возвращает данный узел как позицию (или ноль, если это дозорный). частная позиция Position (Node node) { if (узел == заголовок || узел == трейлер) вернуть ноль; возвратный узел; } // публичные методы доступа // Возвращает количество элементов в связанном списке. общественный размер int() { размер возврата; } // Проверяет, пуст ли связанный список. общедоступное логическое значение isEmpty() { возврат (размер == 0); } // Возвращает первую позицию в связанном списке (или ноль, если он пуст). общественная позиция first() { вернуть позицию(header.getNext()); } // Возвращает последнюю позицию в связанном списке (или ноль, если он пуст). общественная позиция последний() { вернуть позицию(trailer.getPrev()); } // Возвращает позицию непосредственно перед позицией p (или ноль, если p первая). public Position before(Position p) выдает IllegalArgumentException { Node node = validate(p); вернуть позицию(node.getPrev()); } // Возвращает позицию сразу после позиции p (или ноль, если p последняя). public Position after(Position p) выдает IllegalArgumentException { Node node = validate(p); вернуть позицию(node.getNext()); } // частные коммунальные услуги // Добавляет элемент e в связанный список между заданными узлами. Private Position addBetween(E e, Node pred, Node succ) { Node новейший = новый Node(e, pred, succ); // создаем и связываем новый узел pred.setNext(самый новый); succ.setPrev(самый новый); размер++; вернуть новейший; } // публичные методы обновления // Вставляет элемент e в начало связанного списка и возвращает его новую позицию. public Position addFirst(E e) { return addBetween(e, header, header.getNext()); // сразу после заголовка } // Вставляет элемент e в конец связанного списка и возвращает его новую позицию public Position addLast(E e) { return addBetween(e, Trailer.getPrev(), Trailer); // непосредственно перед трейлером } // Вставляет элемент e непосредственно перед позицией p и возвращает его новую позицию. public Position addBefore(Position p, E e) выдает IllegalArgumentException { Узел узел = проверить (р); return addBetween(e, node.getPrev(), node); } // Вставляет элемент e сразу после позиции p и возвращает его новую позицию. public Position addAfter(Position p, E e) выдает IllegalArgumentException { Node node = validate(p); return addBetween(e, node, node.getNext()); } // Заменяет элемент, хранящийся в позиции p, и возвращает замененный элемент. public E set(Position p, E e) выдает IllegalArgumentException { Node node = validate(p); E ответ = node.getElement(); node.setElement(e); обратный ответ; } // Удаляет элемент, хранящийся в позиции p, и возвращает его (признавая p недействительным). public E удалить (Position p) выдает IllegalArgumentException { Node node = validate(p); Предшественник Node = node.getPrev(); Преемник Node = node.getNext(); предшественник.setNext(преемник); преемник.setPrev(предшественник); размер--; E ответ = node.getElement(); node.setElement(ноль); node.setNext(ноль); node.setPrev(ноль); обратный ответ; } // частный класс, реализующий интерфейс Iterator // опускаем метод удаления и его необходимые данные публичный класс ListIterator реализует Iterator { // данные экземпляра частный курсор Position = first(); частная позиция current = null; // определенные абстрактные методы общедоступное логическое значение hasNext() { возврат (курсор! = ноль); } public E next() выдает NoSuchElementException { если (курсор == ноль) throw new NoSuchElementException("ничего не осталось"); текущий = курсор; курсор = после (курсор); вернуть текущий.getElement(); } } // Требуется итерируемый абстрактный метод общественный Iterator итератор() { вернуть новый ListIterator(); } } import java.util.Iterator; общественный класс ListOfStrings { public static void main(String[] args) { Номера PositionalList = новый LinkedPositionalList(); // 1. Numbers.addFirst("Два"); // 2. Numbers.addLast("Три"); // 3. Numbers.addFirst("Один"); // 4. Numbers.addLast("Четыре"); // 5. Iterator i = Numbers.iterator(); Строка Curr; в то время как (i.hasNext()) { Curr = i.next(); System.out.println(curr); } // 6. Numbers.remove(numbers.first()); // 7. Numbers.remove(numbers.last()); // 8. Iterator i2 = Numbers.iterator(); я2.следующий(); Numbers.addBefore(i2, «Привет»); } } Попытка извлечь позицию итератора и отправить эти данные в метод addBefore(), но все попытки безуспешны.
Я составляю очень стандартный позиционный список и работаю с итераторами. Я пытаюсь использовать итератор для перебора моего списка и добавления элемента между позициями. Мой метод addBefore() принимает 2 параметра: (Position p, E e)
Я создал свой объект Iterator и начал перебирать список, и я хочу вставить элемент прямо перед тем местом, где сейчас находится мой итератор. Я пытаюсь отправить свой итератор в качестве параметра, но моя структура данных не позволяет этого, поскольку он не относится к типу Position.
Есть ли способ привести переменную Iterator к переменной Position, чтобы я мог выполнить операцию? Или какое-то другое решение?
Все помогает. Спасибо.
Вот код, с которым я работаю:
публичный интерфейс Position { // Возвращает элемент, хранящийся в этой позиции. E getElement() выдает исключение IllegalStateException; } import java.util.Iterator; импортировать java.util.NoSuchElementException; публичный класс LinkedPositionalList реализует PositionalList { // вложенный класс узла частный статический класс Node реализует Position { частный элемент E; // ссылка на элемент, хранящийся в этом узле частный Node предыдущая; // ссылка на предыдущий узел в списке частный Node следующий; // ссылка на следующий узел в списке public Node(E e, Node p, Node n) { элемент = е; предыдущий = р; следующий = п; } public E getElement() выдает IllegalStateException { если (следующий == ноль) throw new IllegalStateException("Позиция больше не действительна"); возвратный элемент; } общественный Node getPrev() { вернуть предыдущую; } общественный Node getNext() { вернуться следующим; } общественный недействительный setElement (E e) { элемент = е; } public void setPrev(Node p) { предыдущий = р; } public void setNext(Node n) { следующий = п; } } // конец вложенного класса Node // переменные экземпляра LinkedPositionalList частный заголовок Node; // страж заголовка частный трейлер Node; // страж трейлера частный размер int = 0; // количество элементов в списке // Создает новый пустой список. общественный LinkedPositionalList() { заголовок = новый узел(ноль, ноль, ноль); // создаем заголовок трейлер = новый узел(ноль, заголовок, ноль); // трейлеру предшествует заголовок header.setNext(трейлер); // за заголовком следует трейлер } // частные коммунальные услуги // Проверяет позицию и возвращает ее как узел. частный Node validate(Position p) выдает IllegalArgumentException { if (!(p экземпляр узла)) throw new IllegalArgumentException("Invalid p"); Node node = (Node) p; если (node.getNext() == ноль) throw new IllegalArgumentException("p больше нет в списке"); возвратный узел; } // Возвращает данный узел как позицию (или ноль, если это дозорный). частная позиция Position (Node node) { if (узел == заголовок || узел == трейлер) вернуть ноль; возвратный узел; } // публичные методы доступа // Возвращает количество элементов в связанном списке. общественный размер int() { размер возврата; } // Проверяет, пуст ли связанный список. общедоступное логическое значение isEmpty() { возврат (размер == 0); } // Возвращает первую позицию в связанном списке (или ноль, если он пуст). общественная позиция first() { вернуть позицию(header.getNext()); } // Возвращает последнюю позицию в связанном списке (или ноль, если он пуст). общественная позиция последний() { вернуть позицию(trailer.getPrev()); } // Возвращает позицию непосредственно перед позицией p (или ноль, если p первая). public Position before(Position p) выдает IllegalArgumentException { Node node = validate(p); вернуть позицию(node.getPrev()); } // Возвращает позицию сразу после позиции p (или ноль, если p последняя). public Position after(Position p) выдает IllegalArgumentException { Node node = validate(p); вернуть позицию(node.getNext()); } // частные коммунальные услуги // Добавляет элемент e в связанный список между заданными узлами. Private Position addBetween(E e, Node pred, Node succ) { Node новейший = новый Node(e, pred, succ); // создаем и связываем новый узел pred.setNext(самый новый); succ.setPrev(самый новый); размер++; вернуть новейший; } // публичные методы обновления // Вставляет элемент e в начало связанного списка и возвращает его новую позицию. public Position addFirst(E e) { return addBetween(e, header, header.getNext()); // сразу после заголовка } // Вставляет элемент e в конец связанного списка и возвращает его новую позицию public Position addLast(E e) { return addBetween(e, Trailer.getPrev(), Trailer); // непосредственно перед трейлером } // Вставляет элемент e непосредственно перед позицией p и возвращает его новую позицию. public Position addBefore(Position p, E e) выдает IllegalArgumentException { Узел узел = проверить (р); return addBetween(e, node.getPrev(), node); } // Вставляет элемент e сразу после позиции p и возвращает его новую позицию. public Position addAfter(Position p, E e) выдает IllegalArgumentException { Node node = validate(p); return addBetween(e, node, node.getNext()); } // Заменяет элемент, хранящийся в позиции p, и возвращает замененный элемент. public E set(Position p, E e) выдает IllegalArgumentException { Node node = validate(p); E ответ = node.getElement(); node.setElement(e); обратный ответ; } // Удаляет элемент, хранящийся в позиции p, и возвращает его (признавая p недействительным). public E удалить (Position p) выдает IllegalArgumentException { Node node = validate(p); Предшественник Node = node.getPrev(); Преемник Node = node.getNext(); предшественник.setNext(преемник); преемник.setPrev(предшественник); размер--; E ответ = node.getElement(); node.setElement(ноль); node.setNext(ноль); node.setPrev(ноль); обратный ответ; } // частный класс, реализующий интерфейс Iterator // опускаем метод удаления и его необходимые данные публичный класс ListIterator реализует Iterator { // данные экземпляра частный курсор Position = first(); частная позиция current = null; // определенные абстрактные методы общедоступное логическое значение hasNext() { возврат (курсор! = ноль); } public E next() выдает NoSuchElementException { если (курсор == ноль) throw new NoSuchElementException("ничего не осталось"); текущий = курсор; курсор = после (курсор); вернуть текущий.getElement(); } } // Требуется итерируемый абстрактный метод общественный Iterator итератор() { вернуть новый ListIterator(); } } import java.util.Iterator; общественный класс ListOfStrings { public static void main(String[] args) { Номера PositionalList = новый LinkedPositionalList(); // 1. Numbers.addFirst("Два"); // 2. Numbers.addLast("Три"); // 3. Numbers.addFirst("Один"); // 4. Numbers.addLast("Четыре"); // 5. Iterator i = Numbers.iterator(); Строка Curr; в то время как (i.hasNext()) { Curr = i.next(); System.out.println(curr); } // 6. Numbers.remove(numbers.first()); // 7. Numbers.remove(numbers.last()); // 8. Iterator i2 = Numbers.iterator(); я2.следующий(); Numbers.addBefore(i2, «Привет»); } } Попытка извлечь позицию итератора и отправить эти данные в метод addBefore(), но все попытки безуспешны.
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Vuetify: justify-position/align-position vs justify="position"/align="position"
Anonymous » » в форуме CSS - 0 Ответы
- 75 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Почему несоответствие типов компилируется и работает с дженериками и итераторами Java?
Anonymous » » в форуме JAVA - 0 Ответы
- 18 Просмотры
-
Последнее сообщение Anonymous
-