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

avec Java Discussion :

probleme de NoSuchElementException


Sujet :

avec Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Septembre 2009
    Messages
    269
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 269
    Par défaut probleme de NoSuchElementException
    Bonjour,

    je veux compter l'occurence des differentes notes qu'un groupe de 31 enseignants attribue à leurs élèves, pour cela j'ai un listing de note et j'écris le code suivant :

    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
     
     
    do
    	{
    	ligne = entree.readLine();
    	if(ligne==null) break;
    StringTokenizer tk = new StringTokenizer(ligne);
    				int nt = tk.countTokens();
    				int j=1-1;
    				int i=1-1;
    				while(j<68+2)
    					{
    					while(i<nt)
    						{
    						if(j==Integer.parseInt(tk.nextToken()))
    						chiffre[j]++;
    						i++;
    						}
    					j++;
    					}
    				nblu++;
    				}
    				while(nblu<nbtirage2);

  2. #2
    Membre émérite
    Avatar de michel.di
    Homme Profil pro
    Freelance
    Inscrit en
    Juin 2009
    Messages
    782
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 782
    Par défaut
    Salut,

    Petits conseils :
    - Détaille ton code
    - Donne des noms de variables compréhensibles

    Pourquoi?
    C'est illisible et ça ne donne pas envie de lire

  3. #3
    Membre très actif
    Profil pro
    Inscrit en
    Février 2010
    Messages
    766
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 766
    Par défaut
    L'exception ne peux être lancé que par tk.nextToken(), cela signifie qu'il n'y a plus d'element tout simplement.

    Il suffit de catcher ça et de sortir proprement.

  4. #4
    Membre chevronné
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2010
    Messages
    158
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2010
    Messages : 158
    Par défaut
    Il y a un problème dans ton utilisation des compteurs:
    Citation Envoyé par philippe6 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    StringTokenizer tk = new StringTokenizer(ligne);
    int nt = tk.countTokens();
    int i=0;
    while(i<nt)
    {
    	if (j==Integer.parseInt(tk.nextToken()))
    	{
    		i++;
    	}
    }
    Le compteur i n'est incrémenté que si la condition est remplie, il ne représente donc pas le nombre d'éléments parcourus dans ton StringTokenizer, or tu l'utilises comme condition d'arrêt du parcours...

    Tu devrais arrêter de t'embêter avec ce compteur inutile, et utiliser tout simplement le test st.hasMoreTokens() pour déterminer s'il faut continuer le parcours ou non.

  5. #5
    Membre éclairé
    Inscrit en
    Septembre 2009
    Messages
    269
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 269
    Par défaut
    Je pense que si mon code est illisible, ce n'est pas de ma faute, k'avais envoyé 2 programmes complets, avec de nombreuses explications et ce n'est pas du tout ce qui apparait dans mon message,
    pour répondre à sucreglce qui a eu cependant le courage de se débrouller avec ça, le i++ ne dépend pas de la condition
    l'algo est
    si
    faire
    i++
    et pas
    si
    {
    faire
    i++
    }
    merci cependant je vais reécrire ma demande que j'avais pourtant vérifier après l'envoi

    merci

    Philippe

  6. #6
    Membre chevronné
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2010
    Messages
    158
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2010
    Messages : 158
    Par défaut
    Citation Envoyé par philippe6 Voir le message
    pour répondre à sucreglce le i++ ne dépend pas de la condition
    Ah ouais
    Je vais blâmer le manque d'accolades et le manque d'indentation pour expliquer mon erreur.

    Cependant, j'insiste, créer des compteurs au lieu d'utiliser les méthodes prévues par la classe StringTokenizer, ça rend le code moins clair et ça augmente les risques d'erreurs (et l'obtention d'une NoSuchElementException montre bien que tu as du faire une erreur quelque part).


    EDIT: pourquoi 2 discussions avec le même problème ? diviser les réponses, ça n'aide pas à avancer...

  7. #7
    Membre éclairé
    Inscrit en
    Septembre 2009
    Messages
    269
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 269
    Par défaut
    voici ce que je pensais vous avoir adressé :
    Il s'agit de compter les notes
    de 0 à 20 d'un groupe d'enseignants
    après avoir ouvert le fichier note voici le code que j'écris :

    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
     
    do
    {
    ligne = entree.readLine();
    if(ligne==null) break;
    StringTokenizer tk = new StringTokenizer(ligne);
    int nt = tk.countTokens();
    int j=1-1;
    int i=1-1;
    while(j<20)//les notes
    	{
    	while(i<nt)//indice parcourant les lignes de notes représentés     
                               //par les tokens dont le nombre est nt
    	             {
    		if(j==Integer.parseInt(tk.nextToken()))
    		chiffre[j]++;
    		i++;
    	             }
    	j++;
    	}
    }while(ligne!=null);
    donc ce que je pensais vous avoir envoyé est que le partie suivante de ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    while(j<20)
    	{
    	while(i<nt)     
    	             {
    		if(j==Integer.parseInt(tk.nextToken()))
    		chiffre[j]++;
    		i++;
    	             }
    	j++;
    	}
    est fausse car i continu de grandir, car il n'est pas reinitialisé et donc un seul j est traité
    mais si j'écris
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    while(j<20)
    	{
    	while(i<nt)     
    	             {
    		if(j==Integer.parseInt(tk.nextToken()))
    		chiffre[j]++;
    		i++;
    	             }
                 i=0;	
                 j++;
    	}
    alors, j'obtient l'exception NoSuchElementException

    Qu'en pensez vous ?
    merci

    Philippe

  8. #8
    Membre chevronné
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2010
    Messages
    158
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2010
    Messages : 158
    Par défaut
    Citation Envoyé par philippe6 Voir le message
    mais si j'écris
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    while(j<20)
    	{
    	while(i<nt)     
    	             {
    		if(j==Integer.parseInt(tk.nextToken()))
    		chiffre[j]++;
    		i++;
    	             }
                 i=0;	
                 j++;
    	}
    alors, j'obtient l'exception NoSuchElementException
    Comme MigouW l'a déjà fait remarquer ici: le StringTokenizer a déjà été parcouru en entier, remettre le compteur à zéro ne suffit pas, il faudrait réinitialiser le StringTokenizer.

    Franchement, avec une seule discussion, ça serait plus facile à suivre.

  9. #9
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    342
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 342
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    while(j<20)
    	{
    	while(i<nt)     
    	             {
    		if(j==Integer.parseInt(tk.nextToken()))
    		chiffre[j]++;
    		i++;
    	             }
                 i=0;	
                 j++;
    	}
    non mes an plus c'est ridicule de parcoure 20 x la meme ligne.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    	while(i<nt)     
    	             {
    		int j = Integer.parseInt(tk.nextToken());
    		chiffre[j]++;
    		i++;
    	             }
                 i=0;
    en plus d'apres ton code j<20 cela veux dir que les prof ne peuvent pas mettre la note 20

  10. #10
    Membre chevronné
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2010
    Messages
    158
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2010
    Messages : 158
    Par défaut
    Citation Envoyé par rolfone Voir le message
    non mes an plus c'est ridicule de parcoure 20 x la meme ligne.
    Ça aussi J'en étais encore à "expliquer l'erreur" sans chercher plus loin.

    Dans ton code, il faudrait tout de même rajouter un test sur la valeur lue par Integer.parseInt(tk.nextToken()) afin de s'assurer qu'il s'agit d'un indice valable pour le tableau chiffre.

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

Discussions similaires

  1. probleme avec NoSuchElementException
    Par philippe6 dans le forum Débuter avec Java
    Réponses: 5
    Dernier message: 01/12/2010, 11h51
  2. Probleme de rafraichissement d'un BDGrid
    Par marmotte dans le forum Bases de données
    Réponses: 10
    Dernier message: 28/05/2004, 18h07
  3. Probleme sur les chaines de caractere
    Par scorpiwolf dans le forum C
    Réponses: 8
    Dernier message: 06/05/2002, 19h01
  4. [Kylix] Probleme d'execution de programmes...
    Par yopziggy dans le forum EDI
    Réponses: 19
    Dernier message: 03/05/2002, 14h50
  5. [Kylix] Probleme de nombre flottant!!
    Par yopziggy dans le forum EDI
    Réponses: 5
    Dernier message: 02/05/2002, 10h13

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