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 avec NoSuchElementException


Sujet :

avec Java

  1. #1
    En attente de confirmation mail
    Inscrit en
    Septembre 2009
    Messages
    269
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 269
    Points : 96
    Points
    96
    Par défaut probleme avec NoSuchElementException
    Bonjour,
    je voudrais pour une liste d'enseignants, trouver les notes qu'ils seraient susceptibles d'attribuer d'après leur fréquence, j'ai donc un fichier de note , les notes vont de 0 à 20.
    Voici le code que j'écris après avoir ouvert le fichier "notes"

    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
     
    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)
    	{
    	while(i<nt)
    	       {
    	      if(j==Integer.parseInt(tk.nextToken()))
    	      chiffre[j]++;
    	       i++;
    	       }
    	j++;
    	entree.close();
    }while(ligne!=null);
    la partie 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 je l'ai écrite sans faire attention (i doit partir de 0 pour atteidre le nombre de Tokens dans la ligne et là il continue de s'accroitre et ne rentre plus dans la boucle pour la ligne suivante, 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 à l'execution

    qu'en pensez vous ?

    merci,

    Philippe

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

    Informations forums :
    Inscription : Avril 2008
    Messages : 342
    Points : 419
    Points
    419
    Par défaut
    Bonjour;

    je regarde ton problème 1er truc

    http://java.developpez.com/faq/java/...eLigneParLigne

    c'est plus propre je trouve le reste je reflechit

  3. #3
    Membre actif
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2009
    Messages
    130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 130
    Points : 276
    Points
    276
    Par défaut
    A chaque fois que tu fais tk.nextToken(), le curseur avance, et comme tu le parcours jusqu'a son nombre max.

    qd tu le rappelle a la boucle suivante, il n'a plus d'élément.

    Il faut que tu remette le curseur de tk, au niveau du premier élément.

    Je ne suis pas tres calé sur les StringTokeniser mais voila comment tu pourrais faire.

    Code non testé :
    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;
             tk = new StringTokenizer(ligne);	
             j++;
         }
    }
    MigouW

    La seule bataille perdue d'avance est celle que l'on refuse de livrer.


    Pensez au tag
    Ma réponse vous a été utile, votez plus 1 sur le message.
    Ma réponse est hors sujet, votez moins 1 sur le message.

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

    Informations forums :
    Inscription : Avril 2008
    Messages : 342
    Points : 419
    Points
    419
    Par défaut
    voila une solution:

    le fichier:
    10.5;20.0;17.5;20.0
    11.0;13.0;13.2;10.5

    L'algo
    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
            Scanner sc = new Scanner(NewMain3.class.getResourceAsStream("note.txt"));
            // un map Double pour key qui represente les notes
            // Integer pour valeur pour compté
            Map<Double, Integer> notesCount = new HashMap<Double, Integer>();
            String ligne = null;
            while (sc.hasNextLine()) {
                // on lie la ligne
                ligne = sc.nextLine();
                // j'utilise le ; comme delimiteur
                StringTokenizer tokenizer = new StringTokenizer(ligne, ";");
                // pour toutes les notes
                while (tokenizer.hasMoreTokens()) {
                    // on lie la valeur
                    Double note = Double.parseDouble(tokenizer.nextToken());
                    // si la note existe deja on ajoute 1 au compteur
                    if (notesCount.containsKey(note)) {
                        int count = notesCount.get(note);
                        notesCount.put(note, count + 1);
                    // sinon on crée l'entré
                    } else {
                        notesCount.put(note, 1);
                    }
                }
            }
     
            // on affiche
            for (Entry<Double, Integer> v : notesCount.entrySet()) {
                System.out.println(v.getKey() + " : " + v.getValue());
            }
    le output

    13.2 : 1
    17.5 : 1
    13.0 : 1
    11.0 : 1
    20.0 : 2
    10.5 : 2
    la Map est peut être pas la bonne solution


    les int j = 1-1; ??? pourquoi tu fait pas int j = 0;?

    après sinon

    ton entree.close() n'est pas placé la ou il faut je pense

  5. #5
    En attente de confirmation mail
    Inscrit en
    Septembre 2009
    Messages
    269
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 269
    Points : 96
    Points
    96
    Par défaut
    merci Migouw et Rolfone, je n'ai pas répondu tout de suite car ma discussion s'est transformé en deux discussions (probablement une premiere transmise par erreur et par malheur, c'est celle qui a obtenu des réponses (dialogue incongru)), ceci dit tu répond à ma question, je ne savais pas réinitialiser le StrinTokenizer. Merci encore et je vais regarder le lien que vous me proposez

    Merci à nouveau,

    Philippe

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

    Informations forums :
    Inscription : Avril 2008
    Messages : 342
    Points : 419
    Points
    419
    Par défaut
    vas quand même lire l'autre discution elle a des information pour toi

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

Discussions similaires

  1. Probleme avec la copie des surfaces
    Par Black_Daimond dans le forum DirectX
    Réponses: 3
    Dernier message: 09/01/2003, 10h33
  2. Problèmes avec le filtrage des ip
    Par berry dans le forum Réseau
    Réponses: 9
    Dernier message: 30/12/2002, 07h51
  3. probleme avec la touche F10
    Par b.grellee dans le forum Langage
    Réponses: 2
    Dernier message: 15/09/2002, 22h04
  4. Probleme avec fseek
    Par Bjorn dans le forum C
    Réponses: 5
    Dernier message: 04/08/2002, 07h17
  5. [Kylix] probleme avec un imagelist
    Par NicoLinux dans le forum EDI
    Réponses: 4
    Dernier message: 08/06/2002, 23h06

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