2013-10-09 3 views
0

Я написал программу, которая перебирает строковый массив и печатает уникальные слова и их вхождения, а затем печатает их в файл. Эта часть работает отлично, но мне трудно понять, как получить общее количество уникальных слов. У меня такое чувство, что мне нужно создать массив int для счетчика, но я не совсем понимаю, как это сделать. К сожалению, мне не разрешено использовать Hashmap, Sets или Lists; должны придерживаться массивов.Строковый массив - экземпляры уникальных значений

boolean [] done = new boolean[textfile.length]; 
for(int i = 0; i<textfile.length; i++){ 
    if(done[i]) 
     continue; 
    int nb = 0; 
    for(int j = i; j < textfile.length; j++){ 
     if(done[j]) 
      continue; 
     if(textfile[i].equals(textfile[j])){ 
      done[j] = true; 
      nb++; 

     } 
    } 

    pw.println(textfile[i] + "occurs " + nb + " times"); 
} 
+0

Вы можете использовать комплект? – codeMan

+0

нет, только массивы. – user2791187

+0

Что такое переменная 'nb' ?? – codeMan

ответ

1

Я предлагаю вам сделать следующим образом-

-add все значения в массиве и сортировать этот массив. (так что будет легко получить уникальную запись)

-Сообщите все элементы отсортированного массива (один за другим) со словом, которое нужно сравнить.

-Никогда при сравнении слова в текстовом файле со словом, присутствующим в массиве, сохраняйте глобальную переменную i.e. counter, которая будет увеличиваться при каждом появлении уникального символа и сохранит значение для будущего использования.

0

Вы можете установить uniqe_counter за пределами первого и для приращения, что каждый раз, когда Н.Б. == 1 перед печатью

0

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

U необходимо разместить int nb = 0; со стороны первой петли.

1

Прямо сейчас вы сравниваете каждое слово со всеми словами после него в файле, которое принимает O(N^2) раз, вместо этого вы можете создать массив, содержащий все слова, отсортировать его по лексикографическому порядку, который занимает O(NlogN) времени, затем перебирать через массив и подсчет вхождений каждого уникального слова (если 2 смежных слова равны, продолжайте подсчет, иначе распечатайте и сбросьте счетчик), который принимает O(N) раз.

+0

Спасибо, это только то, что мне нужно. Я посмотрю, смогу ли я заставить это работать. – user2791187

0

Самый простой способ:

  1. Сортировка массива
  2. Go корыта отсортированный массив и помню последний уникальная учетная запись
  3. Если lastUniqueEntry отличается в следующей записи. UniqueCount + 1
  4. делать все остальное, как отпечатки уникальных слов и их вхождения
Смежные вопросы