добавить файл в коллекцию Framework из файла - PullRequest
1 голос
/ 09 января 2010

Я не пытаюсь дублировать темы здесь. Моя проблема в том, что я пишу в файл, используя msdos с именем amazon.txt файл содержит 637 слов .. Я хочу, чтобы количество уникальных слов .., а не количество ",", "это" что я еще не учел в коде ..

когда я добавляю к набору деревьев, в нем всего 8 слов .. Должно быть не менее 300 уникальных слов ..

количество файлов = 637 count2 of treeset = 8

Я думал, что treeset обрабатывает дубликаты? Что я делаю неправильно? Файл содержит несколько целых $ 1007 *

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

Ответы [ 3 ]

2 голосов
/ 09 января 2010

Ваш метод подсчета количества записей в TreeSet состоит в том, чтобы выполнить итерацию по множеству и прекратить подсчет при первом появлении строки "---".

Это не правильно. Вы, вероятно, предполагаете, что порядок записей, возвращаемых TreeSet.iterator(), совпадает с порядком, в котором они были вставлены. : *1006*:

Элементы упорядочиваются с использованием их естественного упорядочения или с помощью компаратора, предоставляемого во время создания набора, в зависимости от того, какой конструктор используется.

«Естественный порядок» здесь означает результаты String.compareTo(String) (поскольку String реализует Comparable<String>), который проверяет лексикографический порядок. Другими словами, итератор TreeSet<String> возвращает элементы в алфавитном порядке.

Если вы хотите узнать размер вашего набора, просто используйте size().

0 голосов
/ 09 января 2010

Нет необходимости повторять второй раз, просто замените второй цикл на

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

и не добавляйте "---" к набору деревьев в первом цикле (при условии, что это какой-то маркер конца файла)

if (word.equals("---"))
{
    break;
}
a.add(word);
0 голосов
/ 09 января 2010

Я не вижу нигде, где вы добавляете слово в TreeSet 'a'.

Если я просто упускаю это (и я мог бы быть), я бы поспорил, что проблема в том, что TreeSet не гарантирует итерацию в порядке вставки. То есть вы добавляете «---» в последнюю очередь, но нет никаких причин, по которым он не выйдет из восьмого итератора и не завершит вашу программу.

Так что я бы сказал, избавьтесь от проверки, где вы видите, возвращает ли итератор "---", и посмотрите, куда вас это приведет.


успел проверить, поменять:

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

до:

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

и работает как положено.

Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...