Compter le nombre de 1 dans une ligne

Résolu
mimihh Messages postés 27 Date d'inscription samedi 31 décembre 2011 Statut Membre Dernière intervention 8 février 2014 - 4 déc. 2013 à 03:10
KX Messages postés 16703 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 1 juin 2023 - 4 déc. 2013 à 07:54
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:


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); }
}
}

1 réponse

KX Messages postés 16703 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 1 juin 2023 126
4 déc. 2013 à 07:54
Pourquoi tu stockes l'intégralité des données de ton fichier ?
Si tu veux juste connaître le nombre de 1 de chaque ligne, alors tu prends une ligne, tu comptes le nombre de 1, tu oublies la ligne et tu passes à la suivante, pas besoin de tout stocker...

for(i=0;i< list1.size();i++){ 
    if (list1.get(i).contains("1")){ 
        nb++;

Ceci regarde uniquement si la ligne contient au moins un 1, s'il y en a plusieurs on en comptera toujours qu'un seul.
Pour compter le nombre de 1 de la ligne il faut parcourir toute la chaîne de caractères.

while ((ligne=br.readLine())!=null)
    for (int i=0; i<ligne.length(); i++)
        if (ligne.charAt(i)=='1')
            nb++;
1