Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在java中使用迭代器和MaxHeapPriorityQueue编写下一个方法_Java_Iterator_Queue_Heap_Next - Fatal编程技术网

如何在java中使用迭代器和MaxHeapPriorityQueue编写下一个方法

如何在java中使用迭代器和MaxHeapPriorityQueue编写下一个方法,java,iterator,queue,heap,next,Java,Iterator,Queue,Heap,Next,我需要在这个类中编写next()方法的帮助。我已经尝试了几种方法,但我一直认为我不会返回下一个值,而是返回空值 该类的说明如下:该类应该是公共的、非静态的,并且应该实现java.util.Iterator。应该使用适当的值初始化它的索引实例变量。如果队列中的任何元素尚未由其next()方法返回,则hasNext()方法应返回true。它的next()方法应该以与基础数组相同的顺序返回队列值 因此,我将编写我所拥有的代码,但将缩短它,以便只显示与我的问题相关的重要元素 public class M

我需要在这个类中编写next()方法的帮助。我已经尝试了几种方法,但我一直认为我不会返回下一个值,而是返回空值

该类的说明如下:该类应该是公共的、非静态的,并且应该实现java.util.Iterator。应该使用适当的值初始化它的索引实例变量。如果队列中的任何元素尚未由其next()方法返回,则hasNext()方法应返回true。它的next()方法应该以与基础数组相同的顺序返回队列值

因此,我将编写我所拥有的代码,但将缩短它,以便只显示与我的问题相关的重要元素

public class MaxHeapPriorityQueue<E extends Comparable<E>>
{
private E[] elementData;
private int size;

@SuppressWarnings("unchecked")
public MaxHeapPriorityQueue()
{
    elementData = (E[]) new Comparable[10];
    size = 0;
}
public Iterator<E> iterator()
{
    return new MHPQIterator();
}
公共类MaxHeapPriorityQueue
{
私有E[]元素数据;
私有整数大小;
@抑制警告(“未选中”)
public MaxHeapPriorityQueue()
{
elementData=(E[])新可比[10];
尺寸=0;
}
公共迭代器迭代器()
{
返回新的MHPQIterator();
}
另一个类发生在这里,它与迭代器方法有关

public class MHPQIterator implements java.util.Iterator<E>
{
    private int index;

    public boolean hasNext()
    {
        if(size == 0)
        {
            return false;
        }
        else
        {
            return (index < size);
        }
    }
    public E next()
    {
        return elementData[index];
    }
}
公共类MHPQIterator实现java.util.Iterator
{
私有整数索引;
公共布尔hasNext()
{
如果(大小==0)
{
返回false;
}
其他的
{
返回(指数<大小);
}
}
公共教育
{
返回元素数据[索引];
}
}

我不确定elementData是否有效,但我不知道还可以返回什么。

首先,我的理解是,您的数据在elementData中,大小给出了存储在其中的元素数

迭代器()提供一个迭代器。迭代器实现将索引作为指向当前元素的点

您计划在索引中存储什么?我认为有两种可能性: a) 它给出了当前的数据位置。数组中的第一个元素是元素0,因此在此之前,我会将其初始化为-1。 b) 它可能是可视的。因此它首先初始化为0,然后1表示:第一个元素,即elementData[0]。 ==>它只是一个内部变量,所以它完全取决于您,您想在其中存储什么

现在让我们看看你的hasNext方法。如果sizer为0,那么就不能有下一个元素。好的。但是你要检查迭代器()是否为null?迭代器总是返回你的内部迭代器类的新实例。所以它总是非null!所以这似乎是错误的

您有索引和大小。因此,您只需检查索引是否已经指向最后一个元素。因此,根据上面的选择a/b,您只需检查索引+1是否<大小或索引 然后是下一个函数: -它必须验证是否存在另一个元素。(=>hasNext) -你增加了指数 -返回索引所指向的元素(elementData[index]或elementData[index-1](同样取决于您决定在索引中存储什么)

我的提示是,用纸和笔来处理它。只需编写一个类实例,其中包含3个元素(例如elementData[0]、elementData[1]、elementData[2]hs some value,size=3)。创建迭代器的新实例,初始化索引,然后看看必须发生什么

显示实现的一个可能类是: 导入java.util.Iterator

public class MaxHeapPriorityQueue<E extends Comparable<E>> {
    private E[] elementData;
    private int size;

    @SuppressWarnings("unchecked")
    public MaxHeapPriorityQueue() {
        elementData = (E[]) new Comparable[10];
        size = 0;
    }

    public void add(E data) {
        if (size == 10) throw new IllegalStateException("Queue full");

        elementData[size] = data;
        size++;
    }

    public Iterator<E> iterator() {
        return new MHPQIterator();
    }

    public class MHPQIterator implements java.util.Iterator<E>
    {
        private int index=-1;

        public boolean hasNext()
        {
            return (index+1)<size;
        }

        public E next()
        {
            index++;
            return elementData[index];
        }
    }

    public static void main (String[] args) {
        MaxHeapPriorityQueue<Integer> queue = new MaxHeapPriorityQueue<>();
        Iterator<Integer> iterator = queue.iterator();

        System.out.println("Empty queue:");
        while (iterator.hasNext())
            System.out.println(iterator.next());

        queue.add(1);

        System.out.println("Queue with 1 element (1):");
        iterator = queue.iterator();
        while (iterator.hasNext())
            System.out.println(iterator.next());

        queue.add(2);
        queue.add(3);
        queue.add(4);

        System.out.println("Queue with 4 elementa (1,2,3,4):");
        iterator = queue.iterator();
        while (iterator.hasNext())
            System.out.println(iterator.next());
    }
}
公共类MaxHeapPriorityQueue{
私有E[]元素数据;
私有整数大小;
@抑制警告(“未选中”)
public MaxHeapPriorityQueue(){
elementData=(E[])新可比[10];
尺寸=0;
}
公共空白添加(E数据){
如果(size==10)抛出新的IllegalStateException(“队列已满”);
elementData[大小]=数据;
大小++;
}
公共迭代器迭代器(){
返回新的MHPQIterator();
}
公共类MHPQIterator实现java.util.Iterator
{
私有整数指数=-1;
公共布尔hasNext()
{

return(index+1)首先,我的理解是,您的数据在elementData中,size给出了存储在其中的元素数

迭代器()提供一个迭代器。迭代器实现将索引作为指向当前元素的点

您计划在索引中存储什么?我认为有两种可能性: a) 它给出了当前的数据位置。数组中的第一个元素是元素0,因此在此之前,我会将其初始化为-1。 b) 它可能是可视的。因此它首先初始化为0,然后1表示:第一个元素,即elementData[0]。 ==>它只是一个内部变量,所以它完全取决于您,您想在其中存储什么

现在让我们看看你的hasNext方法。如果sizer为0,那么就不能有下一个元素。好的。但是你要检查迭代器()是否为null?迭代器总是返回你的内部迭代器类的新实例。所以它总是非null!所以这似乎是错误的

您有索引和大小。因此,您只需检查索引是否已经指向最后一个元素。因此,根据上面的选择a/b,您只需检查索引+1是否<大小或索引 然后是下一个函数: -它必须验证是否存在另一个元素。(=>hasNext) -你增加了指数 -返回索引所指向的元素(elementData[index]或elementData[index-1](同样取决于您决定在索引中存储什么)

我的提示是,用纸和笔来处理它。只需编写一个类实例,其中包含3个元素(例如elementData[0]、elementData[1]、elementData[2]hs some value,size=3)。创建迭代器的新实例,初始化索引,然后看看必须发生什么

显示实现的一个可能类是: 导入java.util.Iterator

public class MaxHeapPriorityQueue<E extends Comparable<E>> {
    private E[] elementData;
    private int size;

    @SuppressWarnings("unchecked")
    public MaxHeapPriorityQueue() {
        elementData = (E[]) new Comparable[10];
        size = 0;
    }

    public void add(E data) {
        if (size == 10) throw new IllegalStateException("Queue full");

        elementData[size] = data;
        size++;
    }

    public Iterator<E> iterator() {
        return new MHPQIterator();
    }

    public class MHPQIterator implements java.util.Iterator<E>
    {
        private int index=-1;

        public boolean hasNext()
        {
            return (index+1)<size;
        }

        public E next()
        {
            index++;
            return elementData[index];
        }
    }

    public static void main (String[] args) {
        MaxHeapPriorityQueue<Integer> queue = new MaxHeapPriorityQueue<>();
        Iterator<Integer> iterator = queue.iterator();

        System.out.println("Empty queue:");
        while (iterator.hasNext())
            System.out.println(iterator.next());

        queue.add(1);

        System.out.println("Queue with 1 element (1):");
        iterator = queue.iterator();
        while (iterator.hasNext())
            System.out.println(iterator.next());

        queue.add(2);
        queue.add(3);
        queue.add(4);

        System.out.println("Queue with 4 elementa (1,2,3,4):");
        iterator = queue.iterator();
        while (iterator.hasNext())
            System.out.println(iterator.next());
    }
}
公共类MaxHeapPriorityQueue{
私有E[]元素数据;
私有整数大小;
@抑制警告(“未选中”)
P
public class MHPQIterator implements java.util.Iterator<E>
{
    private int index;

    public boolean hasNext()
    {
        if(size == 0)
        {
            return false;
        }
        else
        {
            return (index < size);
        }
    }
    public E next()
    {
        index++;
        return elementData[index];
    }
}