#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));