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

Java Discussion :

Compter le nombre de 1 dans une ligne


Sujet :

Java

  1. #1
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Femme

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

    Informations forums :
    Inscription : Décembre 2011
    Messages : 57
    Points : 25
    Points
    25
    Par défaut Compter le nombre de 1 dans une ligne
    Bonsoir,
    j'ai un fichier contenant dans chaque ligne plusieurs caractères et un nombre inconnu de "1" je voulais calculer le nombre de 1 dans chaque ligne. Pour cette raison, j'ai mis le contenu de mon fichier dans une liste contenant une ligne dans chaque élément. en comptant le nombre de 1 dans chaque ligne, le résultat obtenus est incorrecte j'obtiens en fait, des nombres très élèves pour chaque ligne. Pouvez vous m'aidez pour détecter l'erreur?
    voici mon code:
    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
     
    public static void main(String[] args) throws Exception {
         List<String> list1 = new ArrayList<String>();
         List<String> list2 = new ArrayList<String>();
         int nb=0;
     
            File f = new File("file.txt");
            FileReader fr = new FileReader(f);
            BufferedReader br= new BufferedReader(fr);
            String ligne = "";
     
            ligne=br.readLine();
            int i=0;
            while(ligne!=null)
            {
                list1.add(ligne.toString());
     
                ligne=br.readLine();
                i++;
            }
            nb=0;
            br.close();
            for(i=0;i< list1.size();i++){
              if (list1.get(i).contains("1")){
                  nb++;
            System.out.println(nb); }
            }
    }

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Tu ne comptes pas le nombre de "1" dans chaque ligne, tu comptes le nombre de lignes qui contient "1", ce que signifie exactement ton test :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (list1.get(i).contains("1"))
    Tu n'es pas obligé de stocker tes lignes dans une liste : tu peux analyser tes lignes directement au fur et à mesure que tu les lis.

    Pour compter le nombre de "1", tu peux rechercher les "1", avec indexOf() par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    int nb=0;
    String ligne;
    while( (ligne=br.readLine()) != null ) {
       int pos=-1;  
       while( (pos=ligne.indexOf("1",pos+1)) >=0 ) {
           nb++;
       }
    }

  3. #3
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2011
    Messages
    196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2011
    Messages : 196
    Points : 242
    Points
    242
    Par défaut
    Tu peux également utiliser une expression régulière qui pour chaque ligne remplace les caractères non égal à 1 par le caractère vide. La longueur de la chaîne retournée te donnera le nombre de 1 que contient la ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    String ligne;
    while( (ligne=br.readLine()) != null ) {
       int numberOfOne = ligne.replaceAll("[^1]*", "").length();
    }

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 559
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 559
    Points : 21 621
    Points
    21 621
    Par défaut
    Citation Envoyé par oliv37 Voir le message
    Tu peux également utiliser une expression régulière qui pour chaque ligne remplace les caractères non égal à 1 par le caractère vide. La longueur de la chaîne retournée te donnera le nombre de 1 que contient la ligne :
    ...... -_-°.
    Impressionnant pour la facilité d'écriture.

    Mais à proscrire pour la complexité algorithmique et en mémoire de la chose. Cela dit, quand le temps de calcul reste suffisamment bas, je suppose que ça passe...

  5. #5
    Membre chevronné
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Points : 1 984
    Points
    1 984
    Par défaut
    Citation Envoyé par oliv37 Voir le message
    Tu peux également utiliser une expression régulière qui pour chaque ligne remplace les caractères non égal à 1 par le caractère vide. La longueur de la chaîne retournée te donnera le nombre de 1 que contient la ligne
    les regexp, c'est un peu le bazooka pour tuer la mouche dans ce cadre la
    Sans compter que tu proposes les regexp à quelqu'un qui ne fait pas la différence entre compter le nombre de 1 par ligne et compter le nombre de lignes qui contiennent un 1.
    Bref, une approche comme celle de joel.drigo, bien que plus longue, me parait plus adaptée (meme s'il manque le fait de devoir stocker le nombre de 1 par ligne et pas le nombre total)

  6. #6
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Femme

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

    Informations forums :
    Inscription : Décembre 2011
    Messages : 57
    Points : 25
    Points
    25
    Par défaut
    Merci pour vos réponses, mais pourriez vous me dire à quel niveau exactement puise je faire l’affichage car il m'affiche pour chaque ligne un nombre très élevé alors qu'il ne doit pas dépasser le 50

  7. #7
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 559
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 559
    Points : 21 621
    Points
    21 621
    Par défaut
    Le nombre en question ne commencerait pas par "12345678910111213" par hasard ?

Discussions similaires

  1. [AC-2000] Création d'une requête pour compter le nombre de ok dans une ligne
    Par yassine06 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 31/05/2010, 16h10
  2. compter le nombre de mot dans une ligne fichier sous shell
    Par ninsekh dans le forum Shell et commandes GNU
    Réponses: 7
    Dernier message: 18/12/2008, 17h54
  3. Réponses: 2
    Dernier message: 06/05/2007, 23h43
  4. Compter le nombre de colonne dans une table
    Par Coin dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 01/12/2006, 16h03
  5. Compter le nombre de caractere dans une chaine
    Par jmjmjm dans le forum C++
    Réponses: 13
    Dernier message: 19/11/2006, 11h37

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