2016-04-16 4 views
-2

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

Предположим, что StrArr1 уже в алфавитном порядке и что все строки в нем - это слова, которые могут встречаться более одного раза, они также все в низких шапках. Убрать recur отлично работает, я тестировал его.

public void CountRecur() { 
    ArrayList <String> StrArr2 = new ArrayList <String>(); 
    StrArr2 = StrArr1; 
    this.RemoveRecur(StrArr2); 
    int count = 0; 
    int j = 0; 
    for (int i = 0; i <= StrArr2.size(); i++) { 
     if (count != 0) { 
      IntArr.add(count); 
     } 
     count = 0; 
     if (i < StrArr2.size()) { 
     while (j < StrArr1.size() && StrArr2.get(i).equals(StrArr1.get(j))) { 
      count++; 
      j++; 
      } 
     } 
    } 
} 

public void RemoveRecur(ArrayList <String> StrArr3) { 
    int i = 1; 
    while (i < StrArr3.size()) { 
     if (StrArr3.get(i).equals(StrArr3.get(i - 1))) { 
      StrArr3.remove(i - 1); 
      i = 0; 
     } 
     i++; 
    } 
} 
+0

1) Назначение StrArr2 = новый ArrayList расточительно и бессмысленно, так как на следующей строке вы назначаете его StrArr1. Просто объявите это так: ArrayList StrArr2 = StrArr1; и пропустите новую часть ArrayList. 2) Трудно следовать методу CountRecur, код довольно плохо написан и нелегко следовать. Какова цель метода и каков ваш точный вопрос, включая результаты, которые вы получаете и ожидаете получить? – pczeus

+0

Из чего я могу видеть ваш код, вы пытаетесь устранить повторяющиеся строки из списка String, а затем зафиксировать количество копий, которые были найдены и удалены, верно? А где «повторяющаяся часть вашего кода»? – pczeus

+0

Чтобы подсчитать количество повторений строк в StrArr1. Я знаю, что мне даже не нужно strarr2 в теории, но я все испробовал, и это приблизило меня к решению. – Harsh

ответ

0

Поскольку вы пытаетесь подсчитать количество появлений струны в виде списка строк, это можно сделать гораздо проще, используя карту, чтобы сохранить строку как ключ и сохранить счетчик как значение в карта. Вот это гораздо более простой метод, который обеспечивает то, что вы хотите использовать концепцию Карты:

public Map<String, Integer> CountStrings(List<String> strings) { 
    Map<String, Integer> counts = new HashMap<>(); 

    for(String aString: strings){ 
     Integer count = counts.get(aString); 
     count = (count == null) ? 1 : ++count; 
     counts.put(aString, count); 
    } 

    return counts; 
} 

Вы действительно должны следовать широко используемым стандартам в Java и использовать верблюжий случае для обоего методов и переменных имен. Метод CountStrings должен быть: countStrings, StrArr1 должен быть strArr1 и т.д.

+0

lol Я только что зарегистрировался после ее решения. Я попробовал свою оригинальную идею и нашел глупую ошибку, которую я делал. на самом деле это было довольно легко. – Harsh

+0

public void CountRecur() { \t \t int j = 0; \t \t int count = 0; \t \t int i = 0; \t \t while (i Harsh

+0

Я прочитал ваше решение после его фиксации – Harsh