0
votes

Comment écrire une méthode suivante avec un itérateur et une maxheappriorityQueue en Java

J'ai besoin d'aide pour écrire cette version suivante () dans cette classe. J'ai essayé plusieurs choses, mais je continue à obtenir que je ne retourne pas la valeur suivante, mais plutôt null.

Les instructions de cette classe se lit comme suit: Cette classe doit être publique, non statique et doit implémenter Java.Util.iterator. La variable d'instance d'index doit être initialisée avec une valeur appropriée. Sa HASNEXT () La méthode devrait renvoyer true si des éléments de la file d'attente doivent encore être retournés par sa méthode suivante (). Sa prochaine méthode () doit renvoyer les valeurs de la file d'attente dans le même ordre que dans la matrice sous-jacente. P>

Je vais donc écrire le code que j'ai, mais je le couperai moins que les éléments importants que sont relatibles à mes émissions de problèmes. p> xxx pré>

et l'autre classe a lieu ici, qui a des liens avec la méthode Itératrice. 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()
    {
        return elementData[index];
    }
}


0 commentaires

3 Réponses :


1
votes

Tout d'abord, ma compréhension est que vos données sont à l'intérieur de l'élémentData et de la taille permettent au nombre d'éléments stockés à l'intérieur.

Itérateur () vous donne un itérateur. Votre implémentation de l'itérateur a indiqué comme point sur l'élément actuel.

Que comptez-vous stocker à l'intérieur de l'index? Je vois 2 possibilités: a) Il vous donne l'emplacement de données actuel. Le premier élément à l'intérieur de la matrice est l'élément 0, afin d'être avant cela, je l'initialiserais sous -1. b) il pourrait être visuel. Donc, il est initialisé comme 0 d'abord, puis 1 signifie: premier élément, qui serait l'élément data [0]. ==> C'est juste une variable interne, il s'agit donc complètement à vous, ce que vous voulez stocker à l'intérieur.

Regardons maintenant votre méthode de hasnext. Si le sizer est 0, il ne peut pas y avoir d'élément suivant. D'accord. Mais alors vous vérifiez si Itérateur () est NULL? Itérateur renvoie toujours une nouvelle instance de votre classe d'itérateurs interne. Donc, ce sera toujours non nul! Donc, cela semble faux.

vous avez l'index et la taille. Donc, il vous suffit de vérifier si l'index pointe déjà sur le dernier élément. Donc, en fonction du choix A / B ci-dessus, vous devez simplement vérifier si Index + 1

puis la fonction suivante: - Il doit valider qu'il existe un autre élément. (=> hasnext) - Vous augmentez l'index - Vous retournez l'élément, l'index indique (ElementData [Index] ou ElementData [Index-1] (dépend à nouveau de votre décision de stocker à l'intérieur de l'index)

mon indice est de jouer avec elle Avec du papier et un stylo. Écrivez simplement une instance de votre classe avec par exemple 3 éléments (donc elementdata [0], elementdata [1], eleplata [2] hs une valeur, taille = 3. Vous créez une nouvelle instance de votre itérateur, index est initialisé, puis voir ce qui doit arriver.

une classe possible qui montre une implémentation est la suivante: import java.util.itéator; xxx


8 commentaires

Oh, merci, cela dégage beaucoup, et je crois que j'utilise l'itérateur depuis que mon élémentaire revient simplement de Null tout le temps.


Comment puis-je le trouver avec l'itérateur, car je n'ai pas d'élémentaldata à regarder?


Vous l'avez fait comme une classe interne? Une classe interne a accès à la classe mère. Juste rapidement une mise en œuvre que vous pouvez vérifier. Le postera comme une autre réponse (afin que vous puissiez voir le code!)


J'ai une méthode parent.


Méthode non parente - classe des parents. Nous parlons de la classe intérieure. Et j'ai édité ma réponse et mettez le code exemple là-bas.


Cependant, je ne peux pas définir l'index sur un nombre car j'ai des tests qui le valident, mais tout le reste a fonctionné. et j'ai posté la méthode correcte HASNEXT () UP ci-dessus.


Testez votre code: - Suivant ne se déplace pas à l'élément suivant, vous obtiendrez donc une boucle sans fin. - Hasnext n'a pas besoin de la vérification de la taille == 0. Votre index ne sera jamais négatif, alors l'index


Vous semblez très bien informé à ce sujet, cela vous dérangerait-il de jeter un coup d'œil à ma méthode de ma contient, est un peu différent, mais il est principalement impliqué dans ce code. Il semble que personne ne le considère et que je n'obtiens aucune aide dessus et je l'ai été bloqué depuis des heures. Voici le lien avec ça. Stackoverflow.com/Questtions/56093410/...



1
votes

Comme ceci:

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

    public boolean hasNext()
    {
        return (index < size);
    }
    public E next()
    {
        return elementData[index++];
    }
}


3 commentaires

Non, cela ne fonctionnera pas, je ne peux pas avoir l'index égal à 0. J'ai des tests qui courent cela.


Et Elementdata ne fait que retourner NULL aussi, je ne pense donc pas que l'élémentaldata devrait être là-bas.


Cela devrait aussi travailler. Il utilise même l'index plus agréable. Si je le décrirais en mots, alors je dirais que cela indique déjà l'élément suivant. Donc, l'initialisation est avec 0 (non -1 comme dans mon code), la vérification n'a pas besoin du +1, puis de l'index est augmentée après le retour de l'élément (à l'aide de l'index ++). Mais l'index ++ est quelque chose que j'essaie toujours d'éviter. (Code propre - éviter les erreurs.)



0
votes

Voici ce qui a fonctionné pour moi, mais la réponse a été postée ici et je l'ai acceptée, mais voici ce qui a fonctionné avec mon code. xxx


0 commentaires