7
votes

Mise en œuvre d'une méthode de totrage pour imprimer une liste liée

J'ai des problèmes avec un projet que j'ai pour ma classe OOP. Je suis presque fini, mais il manque toujours d'une méthode de totring et d'une méthode principale. Pas vraiment sûr comment y aller et apprécierait toute aide. Je veux que mon tostring méthode fonctionne comme suit:

retourne une représentation de chaîne de tous les éléments stockés dans la liste. Une représentation de chaîne d'une liste vide ressemble à tête -> <- queue Une représentation de chaîne d'une liste non vide ressemble à: Tête -> 134 <-> - 8 <-> 42 <-> 1 <- queue xxx

et voici ce que j'ai jusqu'à présent dans ma classe integerlinkedlist xxx

Je pense que j'aime une boucle la voie à suivre ici, mais encore une fois, je ne suis pas sûr.


4 commentaires

Pourquoi faites-vous data = data = data .. mais dans votre tostring () Méthode Créez un Integernode et boucle de la tête à la queue et à l'arrêt Quand c'est la queue ... Ajout du .getData () à chaque fois "


Dans votre code, SetNext () est le paramètre prev = in et setprev () est également réglant prev = in . est ce bien?


@Matisteur merci monsieur. Bon endroit.


@ 3kings tu as absolument raison! Merci.


3 Réponses :


6
votes

Voici comment l'écrire:

@Override  // <-- Annotate that you are overriding the toString() method
public String toString(){
   StringBuilder sb = new StringBuilder();
   sb.append("Head-->");

   IntegerNode curr = head;

   if (curr == null)
   {
      sb.append("<--tail");
      return sb.toString();
   }

   sb.append(curr.getData());
   curr = curr.getNext();
   while(curr != null) {
       sb.append("<-->");
       sb.append(curr.getData());
       curr = curr.getNext();
   }
   sb.append("<--tail");

   return sb.toString();
}


3 commentaires

Merci! Y a-t-il un moyen de le faire en utilisant simplement une chaîne à la place?


@Pauldaniels Bien sûr, créez une chaîne à la place du StringBuilder et utilisez + = au lieu de l'annexe. Remarque Vous devrez convertir le curr.getData () en une chaîne.


Vous pouvez également créer une méthode de tostring pour la classe Integernode également. Ensuite, vous avez un peu de choses récursives.



2
votes

Oui, vous devez utiliser une boucle, car vous souhaitez itérer sur des données de longueur inconnue. Michael Markidis a écrit la réponse plus rapidement que moi, utilise sa solution, mais je suggérerais quelques améliorations à votre code.

string h = "tête ->" + la tête; ne fonctionnera pas , parce que la tête est un objet INTEGERNODE , et vous souhaitez accéder à ses données telles que celles-ci head.getdata () (pourquoi attribuez-vous data = données; < / code> dans cette méthode? Il ne doit que renvoyer)

Si vous souhaitez attribuer des données dans le constructeur qui ont le même nom que le champ, utiliser doivent utiliser ce mot-clé à Effacer clairement que voulez-vous attribuer. Affectation également null suivant et prev n'a aucune signification, donc ce code xxx

devrait ressembler à ceci xxx

ou si vous souhaitez affecter le nœud précédent et suivant xxx


2 commentaires

Merci beaucoup! Je vais certainement apporter des changements.


En outre, une erreur de copie / pâte dans setNext () . Il définit le champ prev .



1
votes

Si vous utilisez Java 8+, Stringjoininer code> le rend facile.

public int pollFirst(){
    int x = head.getData();
    head = head.getNext();
    if (head == null)
        tail = null;
    else
        head.setPrevious(null);
    return x;
}

public int pollLast(){
    int x = tail.getData();
    tail = tail.getPrevious();
    if (tail == null)
        head = null;
    else
        tail.setNext(null);
    return x;
}


0 commentaires