当前位置: 首页 > 知识库问答 >
问题:

具有降序和升序的迭代器不工作

扈俊健
2023-03-14

我正在尝试实现以下实现Iterable的deque:

public class Dequeue<E> implements Iterable<E> {

    protected List<E> deque;

    public Dequeue() {
        this.deque = new ArrayList<>();

    }

    public void insertFirst( E elem ) {
        this.deque.add( 0, elem );
    }

    public void insertLast( E elem ) {
        this.deque.add( elem );
    }

    public E removeFirst() {
        return (this.deque.isEmpty()) ? null : this.deque.remove(0);
    }

    public E removeLast() {
        return (this.deque.isEmpty()) ? null : this.deque.remove( this.deque.size() - 1 );
    }

    public E examineFirst() {
        return this.deque.get(0);
    }

    public E examineLast() {
        return this.deque.get( this.deque.size() - 1 );
    }

    @Override
    public Iterator<E> iterator() {
        return new DequeIterator<>(false);
    }

    public Iterator<E> iterator( boolean isDesc ) {
        return new DequeIterator<>(isDesc);
    }

    public class DequeIterator<E> implements Iterator<E> {

        private int index;
        private boolean isDesc;

        public DequeIterator( boolean isdesc ) {
            this.index = isdesc ? deque.size() - 1 : 0;
        }

        @Override
        public boolean hasNext() {
            return isDesc ? index > 0 : index < deque.size();
        }

        @Override
        public E next() {
            this.index = (isDesc) ? index-- : index++;
            return (E) deque.get(index);
        }

        @Override
        public void remove() {
            deque.remove(index);
        }
    }

}

但是如果我试着用下面的代码测试它,它会进入一个无限循环。发生了什么事?编译器不会返回任何类型的错误,我也不知道迭代器类的实现是否正确。

List<Integer> result = new ArrayList<>();
Dequeue<Integer> deque = new Dequeue<>();
deque.insertLast( new Integer(1) );
deque.insertLast( new Integer(2) );

for( Integer i : deque ) {
    System.out.println(i);
}

共有1个答案

桂学
2023-03-14

实际上,你的代码中有3个错误:

  1. 你不需要迭代deque,而是迭代无用的列表result

这里是代码固定:

Dequeue<Integer> deque = new Dequeue<>();
deque.insertLast(1);
deque.insertLast(2);

for( Integer i : deque ) {
    System.out.println(i);
}

和类DeQueue。dequeIterator

public class DequeIterator<E> implements Iterator<E> {

    ...
    private boolean isDesc;

    public DequeIterator( boolean isdesc ) {
        ...
        this.isDesc = isdesc;
    }

   ...

    @Override
    public E next() {
        return (E) deque.get(isDesc ? index-- : index++);
    }

    ...
}
 类似资料:
  • 问题内容: 我有一个带有产品的mysql表。 这些产品具有类别ID和名称。 我想做的是按类别ID顺序降序排列,然后按产品名称升序排列。 我想要的是 不幸的是,这是行不通的。 甚至可以在mysql中定义第二个排序列的排序顺序吗? 问题答案: 您可以通过以下方式进行操作: 看看优化

  • 我有一个通用的链表,目前由int组成,我想在默认情况下按升序排序,然后切换一个布尔值,按降序排序。我该怎么做?

  • 有人能提供帮助,如何检查排序降序数组以及?干杯!

  • 问题内容: 如何按日期降序对django中的查询集进行排序? 我只想从所有的check_in日期按降序过滤。 问题答案: 注意之前。 Django说明文件

  • 我正在尝试使用与字符串输入和其中一列降序。 以下是我需要实现的目标: 在我的例子中,第二列是一个字符串: 错误:大小不正确 (1),预期:5 错误:找不到对象“myCol” 我在这里找到了类似的解决方案,但无法使其工作: 错误:找不到对象“myCol” 感觉我错过了一些很明显的东西,想法?

  • 我想按第三个和第一个元素对元组数组进行排序,因此我使用了以下代码: 我的问题是,在前面的例子中,我可以按第三个元素和第一个元素的升序排序,也可以按它们的降序排序(使用反向)。但是如何按第三个元素的升序和第一个元素的降序排序。 请在你的回答中考虑以下情况: 在这种情况下,我不知道内部数组的确切大小(取决于我读入该数组的文件模式),我想按侧中的所有项进行排序(一些升序和一些降序)。 编辑:看起来,我明