Как подсчитать частоту каждой строки в уже отсортированном ArrayList без использования Stream API, MAP, Hashset, коллекции API - PullRequest
1 голос
/ 24 апреля 2019

Я пытался использовать приведенный ниже код, хотя он работает, но не удовлетворяет требованию. Пожалуйста, поделитесь своими знаниями, спасибо

String temp;                                
for(int i = 0; i < lexicon.size(); i++)
{
    for (int j = lexicon.size() - 1; j > i; j--)
    {
        if (lexicon.get(i).compareTo(lexicon.get(j)) > 0)
        {
            temp  = lexicon.get(i);
            lexicon.set(i,lexicon.get(j)) ;
            lexicon.set(j,temp);
        }
    }
}


ArrayList<String> uniqueWords = new ArrayList<String>();

for(int i = 0; i < lexicon.size(); i++)       //Removing duplicates 
{
    int wordCount = 1;
    uniqueWords.add(lexicon.get(i));
    for(int j = i+1; j < lexicon.size(); j++)
    {
        if(uniqueWords.get(i).equals(lexicon.get(j)))
        {
            wordCount++;
            lexicon.remove(j);
        }
    }
    System.out.println(uniqueWords.get(i) + "  " + wordCount);
}

Это вывод, который я получаю:

a  6
a  3
a  2
about  1
acknowledged  1
all  1
also  1
and  2
answer  1
at  2
austen  1
be  2
been  1
bennet  2
bennet  1

Мне нужно что-то вроде этого: Количество слов для этого слова

a 11
about 1
acknowledge 1

и т. Д.

Ответы [ 2 ]

1 голос
/ 24 апреля 2019

Проблема в том, что вы удаляете элементы из своего лексикона на lexicon.remove(j);, а также продвигаетесь вперед в своем лексиконе с вашим чеком на lexicon.get(j)

Я не хочу давать вам полный код, которыйработает, потому что вы ничему не научитесь из этого, но я надеюсь, что дал вам достаточно подсказки, чтобы решить вашу проблему.Попробуйте отладить свой код и посмотрите, что происходит с переменными:)

0 голосов
/ 24 апреля 2019

При удалении по индексу j, j get увеличивается на j ++, фактически , пропуская единицу, где оно должно было продолжаться без увеличения.

Как уже отсортировано:

String word = uniqueWords.get(i);
int j = i+1;
while (j < lexicon.size() && word.equals(lexicon.get(j)))
{
    wordCount++;
    lexicon.remove(j);
}

(Я дам код, поскольку он показывает несколько иной подход.)

...