[LAJ] TD 10, encore et toujours ...

Voir le sujet précédent Voir le sujet suivant Aller en bas

[LAJ] TD 10, encore et toujours ...

Message  G39806 le Mer 12 Fév 2014, 19:13

Bonjouuuuur,
Alors voila j'ai encore un soucis avec le TD 10, mon programme ne s'arrête jamais  Shocked 
Je pense que le problème vient de mon while ... Après avoir entrée au clavier 2 ou 3 personnes, je décide d'arrêter le programme donc j'appuis sur "enter" lorsque le programme veut le nom, pareil pour le prénom, ainsi que la date. Mais le programme ne se laisse pas faire et insiste ! Le curieux, il veut absolument que je rentre des prénoms ! pale Enfin bref, je pensais qu'en ne rentrant rien le programme comprendrais qu'il doit donner une valeur "null", mais visiblement on ne se comprends pas ! Donc c'est là que je demande votre aide, quelqu'un aurait une solution ? En gros le programme doit arrêter la boucle lorsque la classe Personne aura la valeur "null".

Code:
package g39806.td.td10;
import java.util.Scanner;
import java.util.*;


public class Annif{
        public static void main (String [] args){
                Scanner clavier = new Scanner (System.in);
                Personne personne;
                Date naiss;
                int moisAujourdhui;
                int nbPersonnes;
                int jour;
                int mois;
                int annee;
                String nom;
                String prenom;
                Calendar now = new GregorianCalendar();
                moisAujourdhui = now.get(Calendar.MONTH)+1;
                nbPersonnes = 0;
                
                prenom = clavier.next();
                nom = clavier.next();
                jour = clavier.nextInt();
                mois = clavier.nextInt();
                annee = clavier.nextInt();
                naiss = new Date (jour, mois, annee);
                personne = new Personne (prenom, nom, naiss);
               [color=#3333ff] while (personne != null){[/color]
                        if (personne.getNaissance().getMois() == moisAujourdhui){
                                System.out.println(personne.getNom()+" "+personne.getPrenom());
                                nbPersonnes = nbPersonnes +1;
                        }

                        prenom = clavier.next();
                        nom = clavier.next();
                        jour = clavier.nextInt();
                        mois = clavier.nextInt();
                        annee = clavier.nextInt();
                        naiss = new Date (jour, mois, annee);
                        personne = new Personne (prenom, nom, naiss);

                }
                System.out.println(nbPersonnes);
        }
}

G39806

Nombre de messages : 9
Age : 24
Prénom : H
Date d'inscription : 02/11/2013

Revenir en haut Aller en bas

Re: [LAJ] TD 10, encore et toujours ...

Message  odintwofec le Mer 12 Fév 2014, 21:28

tu boucle dans ton while car la variable personne  n est jamais mis a null , si tu veut sortir de ta boucle tu pourrais soit faire un compteur qui sortirait après un nombre précis d itération ,
soit faire en sorte qu en rentrant une valeur au clavier ( -1 par exemple ) on sort de la boucle.

odintwofec

Nombre de messages : 17
Age : 25
Prénom : noa
Date d'inscription : 09/10/2011

http://www.elive.pro/en

Revenir en haut Aller en bas

Re: [LAJ] TD 10, encore et toujours ...

Message  mcd le Mer 12 Fév 2014, 21:45

Si tu appuies juste sur ENTER lors d'un clavier.next(), il lit la chaine vide "" (de taille 0) qui n'est pas la même chose que null (pas de chaine).

mcd

Nombre de messages : 1548
Prénom : Marco
Statut : prof
Localisation : Molenbeek
Date d'inscription : 29/09/2006

http://mcd.namok.be

Revenir en haut Aller en bas

Re: [LAJ] TD 10, encore et toujours ...

Message  G39806 le Mer 12 Fév 2014, 22:43

Donc rentrer un null au clavier est impossible.
Il y a aucun moyen de donner la valeur null à "personne" ?

G39806

Nombre de messages : 9
Age : 24
Prénom : H
Date d'inscription : 02/11/2013

Revenir en haut Aller en bas

Re: [LAJ] TD 10, encore et toujours ...

Message  mcd le Jeu 13 Fév 2014, 06:37

Non, on ne peut pas lire null.
Pour le reste, tu peux faire un truc du genre : si c'est la chaine vide alors mettre null mais c'est sans intérêt ici.

mcd

Nombre de messages : 1548
Prénom : Marco
Statut : prof
Localisation : Molenbeek
Date d'inscription : 29/09/2006

http://mcd.namok.be

Revenir en haut Aller en bas

Re: [LAJ] TD 10, encore et toujours ...

Message  nvs le Jeu 13 Fév 2014, 09:20

Ctrl-D (gnu/linux) ou Ctrl-Z (window$) ne le font pas ?





 Mad 

_________________

nvs

Nombre de messages : 5238
Age : 44
Prénom : Nicolas
Statut : prof
Localisation : bxl
Date d'inscription : 24/11/2005

http://nvansteenkiste.googlepages.com

Revenir en haut Aller en bas

Re: [LAJ] TD 10, encore et toujours ...

Message  mcd le Jeu 13 Fév 2014, 09:28

Un Ctrl-D indique qu'il n'y a plus rien à lire (ce qu'on peut tester avec un clavier.hasNext()), il n'y aura donc pas à proprement parler de lecture. Si on lit quand même (avec un clavier.next()), une exception sera levée.
Dans tous les cas, la variable 'nom' ne sera pas modifiée (et donc pas mise à null).

Maintenant, c'est probablement une bonne idée qu'il adapte sa logique pour gérer le ctrl-D.

Note: ces lectures au clavier ne sont pas obligatoires pour résoudre l'énoncé du TD. Un codage en dur des données est suffisant.

mcd

Nombre de messages : 1548
Prénom : Marco
Statut : prof
Localisation : Molenbeek
Date d'inscription : 29/09/2006

http://mcd.namok.be

Revenir en haut Aller en bas

Re: [LAJ] TD 10, encore et toujours ...

Message  Contenu sponsorisé Aujourd'hui à 08:41


Contenu sponsorisé


Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut


 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum