【问题标题】:Writing a ListIterator that mirrors Java's built in Iterator编写一个反映 Java 内置迭代器的 ListIterator
【发布时间】:2016-05-25 00:12:56
【问题描述】:

所以我试图反映 Java 的 ListIterator 的功能。唯一让我难以理解的事情是让 previous() 方法正常工作。

这就是我所拥有的。

public ListIterator300<Item> listIterator() {

    return new ListIterator300<Item>() {

        private Node<Item> n = first;

            public boolean hasNext() {
                 return n.next != last;
            }

            public Item next() {
                n = n.next;
                return n.data;
            }

            public void remove() {
            }

            public boolean hasPrevious() {
               return n.previous != first;
            }

            public Item previous() {
                n = n.previous;
                return n.data;
            }
        };
    }

因此,我遇到的问题是 previous()next() 方法在随后调用时返回相同的数字。现在我读到内置的ListIterator 使用游标。是否有任何一般提示可以如何在我的代码中实现这一点?

例如

[1 2 3 4]

next() -&gt; 1

previous() -&gt; 1

next() -&gt; 1

next() -&gt; 2

【问题讨论】:

  • @Joni 数据初始化为空。如果有用的话,我可以发布其余的代码
  • 这一定是某人的功课。一天前我刚刚在这里回答了同样的问题:stackoverflow.com/questions/37403794/…
  • 使用@DanielWiddis 符号来引起我的注意。我通常不会收到一般 cmets 的通知。
  • 在您的previous() 方法中更新n = n.previous 之前,您没有接受我建议将n.data 存储在临时变量中的更改。添加Node&lt;Item&gt; temp = n.data;然后是n = n.previous;,然后是return temp;。您还有其他具体问题吗?
  • @DanielWiddis 我会在稍后发布详细信息

标签: java list iterator


【解决方案1】:

而不是检查:

n.next != last;

检查:

n != last;

同样适用于:

n.previous != first;

替换为:

n != first;

你明白为什么了吗?

【讨论】:

  • 如果我必须猜测一下,检查 n.next 和 n.previous 总是会领先一位还是落后一位?
  • 别猜——在纸上画出来!当n.next == last 仍然意味着你有一个“下一个”。只有当n == last 你没有任何“下一个”时。之前的情况也是如此。
猜你喜欢
  • 1970-01-01
  • 2012-06-14
  • 2021-10-27
  • 2018-09-23
  • 1970-01-01
  • 2018-09-17
  • 1970-01-01
  • 1970-01-01
  • 2011-10-08
相关资源
最近更新 更多