java - 帮助自定义迭代器

标签 java

我的自定义迭代器遇到问题...next() 方法似乎不起作用。

我认为我的构造函数无法正常工作...并且我收到此错误消息:java.lang.ArithmeticException:/由零

import java.util.Iterator;

public class RandomBag <Item> implements Iterable<Item>
{
  private Node first;
  private int N;
  private int k=0;

  private class Node
  {
    Item item;
    Node next;
  }

  public void add(Item item)
  {
    Node oldfirst = first;
    first = new Node();
    first.item = item;
    first.next = oldfirst;
    N++;
  }

  public boolean isEmpty()
  {
    return first == null;
  }

  public int size()
  {
    return N;
  }

  public Iterator<Item> iterator()
  {
    return new RandomIterator();
  }

  private class RandomIterator implements Iterator<Item>
  {    
    Item[] a = (Item[]) new Object [N];

    public RandomIterator()
    {
      int counter = 0;

      //put items in the array
      for (Node x=first; x!=null; x=x.next)
      {
        a[counter] = x.item;
        counter++;
      }

      //randomize the items in the array
      for (int i=0; i<size(); i++)
      {
        int randomIndex = StdRandom.uniform(i, size());
        Item item = a[randomIndex];
        a[randomIndex] = a[i];
        a[i] = item;
      }
    }

    public void remove() {}

    public boolean hasNext()
    {
      return k!=N;
    }

    public Item next()
    {
      Item item = a[k % a.length];
      k++;
      return item;
    }
  }
  public static void main(String[] args)
  {
    RandomBag<Double> numbers = new RandomBag<Double>();
    Iterator iter = numbers.iterator();

    numbers.add(1.0);
    numbers.add(4.0);
    numbers.add(3.0);
    numbers.add(5.0);

    StdOut.println(iter.next());
    StdOut.println(iter.next());
    StdOut.println(iter.next());
    StdOut.println(iter.next());
  }
}

最佳答案

问题出在这个方法上:

public Item next()
{
  Item item = a[k % a.length]; // If a.length is zero... BOOM
  k++;
  return item;
}

关于java - 帮助自定义迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6365948/

相关文章:

java - 更改 View 中的文本时,android Activity 崩溃

java -/urlpage 和 urlpage 有什么区别?

Java 无法将我的 Total_value 添加到具有 100 个槽的新数组中

java - Maven:将 Scala 代码和 Java 代码一起构建到一个 Fat JAR 中

java - BroadcastReceiver 在连接蓝牙时通知

java - Mapreduce 作业因 IO 异常而失败

java - 使用invokeLater 和不使用invokeLater 显示JFrame 有什么区别?

java - 通过自己的 Java 客户端通过 HTTPS/SSL 连接的问题

java - selenium 找不到出现在我的浏览器中的 iframe

java - Itext PDF writer,有什么方法可以在pdf中允许unicode下标符号吗? (没有 setTextRise)