IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

Affichage en boucle


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Affichage en boucle
    Bonjour,

    J'ai un soucis au niveau de l'affichage d'une structure de données.
    (Voir le code ci-dessous)

    On doit créer une méthode affiche() qui affiche dans l'ordre la totalité des chaînes contenues dans la structure Curseur. L'utilisation préalable de gauche() ou droite() ne doit pas changer l'effet de cette méthode.

    Je vais tenter de m'expliquer.
    A savoir que dans le code, j'utilise dans l'ordre, la méthode affD(), puis affiche(), puis affD().
    Je n'obtiens pas la même chose avant et après affiche(), avec la méthode affD(). Et après, j'utilise les méthodes gauche() et affD(), et là j'ai le droit à un affichage en boucle.

    Par contre, si j'enlève affiche(), je n'ai pas de soucis.

    Donc je pense que c'est évident, il y a un soucis dans ma méthode affiche(). Mais je me creuse la tête depuis un certain moment, et je n'arrive pas à trouver mon erreur.

    En espérant avoir été précise dans mon explication.
    Merci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    import java.util.Scanner;
     
     
    public class curseur {
    	private class chainage {
    			String elt;
    			chainage suiv;
    	}
    	chainage avant;
    	chainage apres;
     
    	curseur() {
    		avant=null;
    		apres=null;
    	}
     
    	public void droite() {
    		chainage aux=apres;
    		apres=apres.suiv;
    		aux.suiv=avant;
    		avant=aux;
    	}
     
    	public void gauche() {
    		chainage aux=avant;
    		avant=avant.suiv;
    		aux.suiv=apres;
    		apres=aux;
    	}
     
    	public void affD() {
    		chainage aux=apres;
    		while (aux!=null) {
    			System.out.print(aux.elt);
    			aux=aux.suiv;
    		}
    		System.out.println();
    	}
     
    	public void insert (String s) {
    		chainage aux=new chainage();
    		aux.elt=s;
    		aux.suiv=avant;
    		avant=aux;
    	}
     
    	public void delete() {
    		avant=avant.suiv;
    	}
     
    	public void affiche() {
    		chainage a=avant;
    		chainage b=apres;
    		chainage aux = new chainage();
    		while (b!=null) {
    			aux=b;
    			b=b.suiv;
    			aux.suiv=a;
    			a=aux;
    		}
    		while (a!=null) {
    			System.out.print(a.elt);
    			a=a.suiv;
    		}
    		System.out.println();
    	}
     
    	public static void main (String args[]) {
    		Scanner scan=new Scanner(System.in);
    		curseur c = new curseur();
    		c.insert("Ra");
    		c.insert("Ta");
    		c.gauche();
    		System.out.print("Avant affichage :");
    		c.affD();
    		System.out.print("Affiche : ");
    		c.affiche();
    		System.out.print("Après affichage :");
    		c.affD();
    		c.gauche();
    		System.out.print("Appuyez sur une touche et sur entrée");
    		scan.next();
    		c.affD();
    		/*scan.next();
    		System.out.print("Affiche : ");
    		c.affiche();
    		scan.next();
    		c.droite();
    		c.affD();
    		System.out.print("Affiche : ");
    		c.affiche();
    		scan.next();
    		c.delete();
    		c.affD();
    		System.out.print("Affiche : ");
    		c.affiche();
    		scan.next();
    		c.droite();
    		c.affD();
    		System.out.print("Affiche : ");
    		c.affiche();
    		scan.next();
    		c.insert("pis");
    		c.gauche();
    		c.affD();
    		System.out.print("Affiche : ");
    		c.affiche();
    		scan.next();
    		c.gauche();
    		c.affD();
    		System.out.print("Affiche : ");
    		c.affiche();*/
    	}
    }
    Dernière modification par Jannus ; 14/05/2010 à 15h02. Motif: Retrait PJ et ajout du code

  2. #2
    Membre chevronné
    Inscrit en
    Avril 2010
    Messages
    239
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 239
    Par défaut
    Bonjour,


    Si je comprends bien la logique, quand vous allez vers la droite, après devient son suivant et avant devient après.

    A quoi servent les lignes en rouge ci-dessous ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public void droite() {
    		chainage aux=apres;
    		apres=apres.suiv;
    		aux.suiv=avant;
    		avant=aux;
    	}
    	
    public void gauche() {
    		chainage aux=avant;
    		avant=avant.suiv;
    		aux.suiv=apres;
    		apres=aux;
    	}

  3. #3
    Invité
    Invité(e)
    Par défaut
    Je ne saurais pas expliquer, puisque c'est le code qu'on nous a fourni.
    J'ai été obligée de faire des tests pour comprendre le fonctionnement de ces deux méthodes.

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    333
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 333
    Par défaut
    Comme jcdentons l'a indiqué les méthodes droites/gauches sont curieuses .... mais si c'est du code fourni à ne pas toucher

    Alors la constatation est qu'il est possible de créer un cycle avec ta classe chainage (méthodes gauche/droite) ... et donc ton test dans ton while n'est pas bon :

    tu dois stocker les éléments déjà affichés et faire un test si il n'a pas déjà été affiché.

  5. #5
    Invité
    Invité(e)
    Par défaut
    qu'il est possible de créer un cycle avec ta classe chainage (méthodes gauche/droite)
    Comme déjà les deux méthodes sont bizarres, j'ai un peu de mal à construire la méthode affiche.

    En gros,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    while (b!=null) {
    	aux=b;
    	b=b.suiv;
    	aux.suiv=a;
    	a=aux;
    }
    Ici, je mets tous les éléments dans a (avant) jusqu'à ce que b (après) soit vide.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while (a!=null) {
    	System.out.print(a.elt);
    	a=a.suiv;
    }
    Et ici, j'affiche tous les éléments de a.

    Et au moment de l'affichage, je fais dans l'ordre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    System.out.print("Avant affichage :");
    c.affD();
    System.out.print("Affiche : ");
    c.affiche();
    System.out.print("Après affichage :");
    c.affD();
    Ce qui donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Avant affichage :Ta // Affichage de "apres" avec méthode affD
    Affiche : TaRa // Affichage de la structure de données
    Après affichage :TaRa // Affichage de "apres" avec méthode affD
    On voit clairement que "avant" et "apres" ont été modifiés après la méthode ou pendant la méthode affiche. Je ne vois pas comment cela peut être possible.

    Et un peu plus loin, j'ai le droit à un affichage en boucle.

  6. #6
    Membre chevronné
    Inscrit en
    Avril 2010
    Messages
    239
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 239
    Par défaut
    En fait, vous modifiez votre structure à ce niveau là (en rouge) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    	
    	public void affiche() {
    		chainage a=avant;
    		chainage b=apres;
    		chainage aux = new chainage();
    		while (b!=null) {
    			aux=b;
    			b=b.suiv;
    			aux.suiv=a;
    			a=aux;
    		}
    		while (a!=null) {
    			System.out.print(a.elt);
    			a=a.suiv;
    		}
    		System.out.println();
    	}
    Cela revient à faire :
    , ce qui modifie donc avant et apres, non ?

    Pour l'affichage, je ferai quelquechose du genre (comme pour affD) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    chainage aux = avant;
    while (aux != null) {
    	System.out.print(aux.elt);
    	aux = aux.suiv;
    }
    aux = apres;
    while (aux != null) {
    	System.out.print(aux.elt);
    	aux = aux.suiv;
    }
    System.out.println();
    Est-ce ce que vous attendez ?
    Je n'ai pas pu tester correctement, mais je vous conseille de tester en ajoutant plus de deux valeurs ...
    Y a-t-il un ordre à respecter ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. GLUT: Séparer boucle d'affichage et boucle de jeu
    Par dream25 dans le forum API graphiques
    Réponses: 8
    Dernier message: 03/10/2011, 00h02
  2. affichage en boucle des images à partir d'un repertoire
    Par fraizas77 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 28/12/2010, 13h55
  3. affichage en boucle image recu sur flux udp/rtp VLC
    Par aziatedu13 dans le forum Multimédia
    Réponses: 1
    Dernier message: 20/02/2008, 14h41
  4. Modifier des paramètres pendant un affichage en boucle
    Par lafarigoule dans le forum Interfaces Graphiques
    Réponses: 7
    Dernier message: 26/12/2007, 23h09
  5. [XSL] Affichage hors boucle
    Par Ptite Pupuce dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 07/11/2007, 19h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo