Поиск совпадающих значений в массиве

#java #arrays

#java #массивы

Вопрос:

Мне было поручено назначить numMatches с количеством элементов в пользовательских значениях, которые равны matchValue . userValues содержит элементы NUM_VALS. Он будет протестирован со следующими входными данными:

Значение соответствия: 2, значения пользователя: {2, 1, 2, 2}

Значение соответствия: 0, значения пользователя: {0, 0, 0, 0}

Значение соответствия: 10, значения пользователя: {20, 50, 70, 100}

 import java.util.Scanner;

public class FindMatchValue {
    public static void main(String[] args) {
        Scanner scnr = new Scanner(System.in);

        final int NUM_VALS = 4;
        int[] userValues = new int[NUM_VALS];
        int i;
        int matchValue;
        int numMatches = -99; // Assign numMatches with 0 before your for loop

        matchValue = scnr.nextInt();
        for (i = 0; i < userValues.length;   i) {
            userValues[i] = scnr.nextInt();
        }
        // Anything above this can't be changed.
        numMatches = 0;
        if (matchValue == numMatches) {
            numMatches = numMatches   1;
        }
        // Anything below this can't be changed.
        System.out.println("matchValue: "   matchValue   ", numMatches: "   numMatches);
    }
}
  

Ваш вывод matchValue: 2, numMatches: 0

Ожидаемый результат matchValue: 2, numMatches: 3

Ваш вывод matchValue: 0, numMatches: 1

Ожидаемый результат matchValue: 0, numMatches: 4

Ваш вывод matchValue: 10, numMatches: 0

Ожидаемый результат matchValue: 10, numMatches: 0

Единственный способ заставить работать другой ввод — это изменить numMatches с 0 на соответствие одному из других значений в matchValue, но не всем 3 одновременно.

Комментарии:

1. Эти тестовые примеры / выходные данные не имеют для меня никакого смысла.

2. пожалуйста, лучше структурируйте свой вопрос

Ответ №1:

Вам нужно посетить все элементы массива и увеличить значение numMatches для каждого совпадения.

 numMatches = 0;
for (int x = 0; x < userValues.length; x  ) {
    if (matchValue == userValues[x]) {
        numMatches = numMatches   1;   
    }
}
  

Примечание: вы numMatches = numMatches 1 также можете записать как numMatches = 1 .

Пример запуска после этого изменения:

 2
2 1 2 2
matchValue: 2, numMatches: 3
  

Комментарии:

1. Большое вам спасибо! Я пытался использовать ((matchValue == userValues) раньше, но я забыл поставить [] . спасибо

Ответ №2:

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

 private static long getNumMatches(final int[] arr, final int matchValue) {
    return  Arrays.stream(arr)
            .filter(i -> i == matchValue)
            .count();
}
  

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

 int[] input1 = {2, 1, 2, 2};
int matchValue1 = 2;
int[] input2 = {0, 0, 0, 0};
int matchValue2 = 0;
int[] input3 = {20, 50, 70, 100};
int matchValue3 = 10;

System.out.println("matchValue: "   matchValue1   ", numMatches: "   getNumMatches(input1, matchValue1));
System.out.println("matchValue: "   matchValue2   ", numMatches: "   getNumMatches(input2, matchValue2));
System.out.println("matchValue: "   matchValue3   ", numMatches: "   getNumMatches(input3, matchValue3));