1 votes

ajouter un fichier aux collections cadre à partir d'un fichier

Je n'essaie pas de dupliquer les fils de discussion. Le problème est que j'utilise msdos pour introduire un fichier appelé amazon.txt. Le fichier contient 637 mots Je veux un décompte des mots uniques et non un décompte des "a", "the", "this" qui n'ont pas encore été pris en compte dans le code

Je ne sais pas si je peux me permettre de faire des erreurs Il devrait y avoir au moins 300 mots uniques

nombre de fichiers totaux = 637 count2 de l'ensemble d'arbres = 8

Je pensais que treeset gérait les doublons, qu'est-ce que je fais de travers ? Le fichier contient des ints et des $

import java.util.Scanner;
import java.util.ArrayList;
import java.util.TreeSet;
import java.util.Iterator;
import java.util.HashSet;

public class practice1
{
    public static void main(String[] args)
    {
        Scanner     sc = new Scanner(System.in);    
        String      word;
        //String grab;
        int count = 0;
        int count2 =0;
        int count3 =0;
        int count4 =0;
        int number;
        //ArrayList<String> a = new ArrayList<String>();
        TreeSet<String> a = new TreeSet<String>();

        while (sc.hasNext()) 
        {
            word = sc.next();
            count++;           // 637 words
            a.add(word);
            if (word.equals("---"))
            {
                break;
            }
        }

        Iterator<String> it = a.iterator();

        while(it.hasNext())
        {
            string grab = it.next(); 
            count2++;                   // 8 words

            if (grab.equals("---"))
            {
                break;
            }
        }

        System.out.println("count2");
        System.out.println(count2);
        System.out.println("count");
        System.out.println(count);          
        System.out.println("\nbye...");
    }
}

2voto

matt b Points 73770

Votre méthode pour compter le nombre d'entrées dans le TreeSet est d'itérer sur le Set et d'arrêter de compter lorsque vous voyez pour la première fois la chaîne de caractères "---" .

Ce n'est pas correct. Vous supposez probablement que l'ordre des entrées renvoyées par TreeSet.iterator() est le même ordre que celui dans lequel ils ont été insérés. Il s'agit n'est pas le cas :

Les éléments sont ordonnés selon leur ordre naturel ou par un comparateur fourni lors de la création de l'ensemble, en fonction du constructeur utilisé.

Par "ordonnancement naturel", on entend ici les résultats de String.compareTo(String) (puisque String implémente Comparable<String> ), qui vérifie l'ordre lexicographique. En d'autres termes, a l'itérateur d'un TreeSet<String> renvoie les éléments dans l'ordre alphabétique.

Si vous voulez connaître la taille de votre Set, utilisez simplement size() .

0voto

anq Points 1420

Je ne vois nulle part où vous ajoutez le mot dans le TreeSet "a".

Si je n'ai pas compris (et c'est possible), je parierais que le problème vient du fait qu'un TreeSet n'est pas garanti d'itérer dans l'ordre d'insertion. En d'autres termes, vous ajoutez "---" en dernier mais il n'y a aucune raison pour qu'il ne sorte pas de l'itérateur en 8ème position et ne mette pas fin à votre programme.

Je dirais donc qu'il faut se débarrasser de la vérification qui consiste à voir si l'itérateur renvoie "---" et voir ce que cela donne.


Il a eu le temps de vérifier, de changer :

    if (grab.equals("---"))
    {
        break;
    }

à :

    if (grab.equals("---"))
    {
        //break;
    }

et cela fonctionne comme prévu.

Bonne chance !

0voto

stacker Points 34209

Il n'est pas nécessaire d'itérer une deuxième fois, il suffit de remplacer la deuxième boucle par

System.out.println("Treeset.size():" + a.size() );

et n'ajoute pas "---" à treeset dans la première boucle (en supposant qu'il s'agit d'une sorte de marqueur de fin de fichier)

if (word.equals("---"))
{
    break;
}
a.add(word);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X