Код для подсчета количества вхождений элемента в строку java - PullRequest
0 голосов
/ 26 марта 2020

У меня есть этот код здесь, и для меня имеет смысл распечатать, сколько экземпляров встречается в массиве элемента в массиве [i]. Счет никогда не идет выше единицы, что я делаю не так?

import java.util.Scanner;
public class poker
{
    public static void main(String [] args)
    {
        Scanner scan = new Scanner(System.in);
        String[] array = new String[5];
        for(int i = 0; i < array.length; i++)
        {
            array[i] = scan.nextLine();
        }
        for (int i = 0; i < array.length; i++) {
            int count = 0;
            for (int j = 0; j < array.length; j++) {
                {
                    if (array[i] == array[j]) {
                        count++;
                    }

                }
                if (count >= 3) {
                    System.out.println(array[i] + " exists " + count + " times.");
                }
            }
        }
    }
}

Ответы [ 3 ]

2 голосов
/ 26 марта 2020

Ваше сравнение типа данных String не будет работать, если это не тот же экземпляр. Чтобы просто проверить, имеют ли строки одинаковые символы, вы должны использовать .equals(). Имейте в виду, что сравнение Integer (не int) также работает следующим образом. Причиной этого является то, что String является классом, а не примитивным типом. Также прочитайте этот пост .

Так что с

if (array[i].equals(array[j])) {
    count++;
}

у вас все будет хорошо.


Дополнительно (больше читаемое) решение

Чтобы дать вам расширенный подход к подсчету одинаковых значений, я создал для вас небольшую выборку. Вам нужна функция groupingBy. При подсчете вхождений вы объединяете все значения списка в один атрибут.

Пример

Map<String, Long> nameAndCount = Arrays.asList(array).stream().collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));

for(Entry<String, Long> entry : nameAndCount.entrySet()) {
    System.out.println(entry.getKey() +  " exists " + entry.getValue()+ " times.");
}
1 голос
/ 26 марта 2020

Чтобы проверить равенство строк в java, вы должны использовать функцию equals().
Измените строку на if (array[i].equals(array[j])), и у вас получится go!
Оператор == вернется Значение true только в том случае, если ссылочный адрес двух элементов массива одинаков, поэтому по этой причине вы никогда не получите счетчик больше одного, поскольку каждый ссылочный адрес уникален.

1 голос
/ 26 марта 2020

this

if (array[i] == array[j])

будет иметь значение true, только если ссылка одинакова, если вы хотите сравнить строковое значение, используйте

if (array[i].equals(array[j]))
...