2016-02-06 2 views
0

новенькой Java, и я не могу понять это:Подсчет повторяющихся строк в массиве с равными()

Все, что я пытаюсь сделать, это распечатать дубликат строка и количество раз, он показывает в массив (не используя хэш-таблицы или что-то в этом роде, просто очень упрощенно).

Скажем, для массива, как это:

tempArray = {"dogs", "cats", "dogs", "dogs", "mice", "snakes", "cats"} 

Вот мой код до сих пор:

int flowerCount = 0; 
for (int j = 0; j < tempArray.length - 1; j++) { 
     for (int k = j + 1; k < tempArray.length; k++) { 
       if((tempArray[j].equals(tempArray[k])) && (j != k)) { 
        System.out.println(tempArray[j]); 
        flowerCount++; 
       } 

     } 

} 

Очевидно, что это не работает, что я делаю неправильно здесь? Кажется, это должно быть так просто сделать, но я не могу получить вложенные петли и счетчик справа.

+1

Почему это, очевидно, не работает? Каков ожидаемый результат и каков фактический результат? –

+0

Как я уже сказал, ожидаемый вывод - «напечатать повторяющуюся строку и количество раз, когда она появляется в массиве». Все, что он делает в настоящее время, печатает дублированный элемент ошибочное количество раз – AdjunctProfessorFalcon

+0

, вы ищете определенную строку, которая известна до запуска функции, или пытаетесь найти все строки, которые дублируются? поэтому в вашем примере, если ваш выход будет «собаками» * 3, «кошками» * 2? – rothloup

ответ

1

Вы можете отсортировать массив с помощью Arrays.sort. Это ставит равные элементы рядом друг с другом. Затем вы можете просто перебирать список с помощью цикла while, ища последовательные элементы, которые равны.

int i = 0; 
while (i < arr.length) { 
    int start = i; 
    while (i < arr.length && arr[i].equals(arr[start])) { 
    ++i; 
    } 
    int count = i - start; 
    System.out.println(arr[start] + " " + count); 
} 
+0

Удивительно, спасибо! – AdjunctProfessorFalcon

+0

Вы можете сделать это только с одним контуром и напечатать предыдущее, когда элемент изменится. – Voicu

1

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

Метод add() в наборе возвращает логическое значение, указывающее, было ли добавление успешным или нет. Если строка, которую вы пытаетесь добавить, уже находится в наборе, добавление завершится неудачно, и метод вернет false.

Так что-то вроде:

HashSet<String> yourSet = new HashSet<>(); //Could be any kind of set, I'm just used to HashSets 
int j = 0; j < tempArray.length - 1; j++) { 
    if (yourSet.add(tempArray[j]) { 
     //String was added succesfully, so it is not a duplicate. 
    } else { 
     //String is duplicate. Increment a duplicate counter for this string (and start at 2, if you want to include the initial occurence that is already in the set 
    } 
} 
1

с массивом и

String printed = ""; 
    for(String auxOne : tempArray){ 
     int CountRepeat = 0; 
     for(String auxTwo : tempArray){ 
      if(auxOne.equals(auxTwo)){ 
       CountRepeat++; 
      } 
     } 
     if(CountRepeat>1 && (printed.indexOf(auxOne)==-1)){ 
      printed += auxOne; 
      System.out.println(auxOne + " : " + CountRepeat); 
     } 
    } 

} 
Смежные вопросы