#java
#java
Вопрос:
Я не могу сохранить умноженные индексы двух массивов и добавить их, он всегда сохраняет и умножает последние индексы.
Для этого примера у меня есть значения {1, 2, 3} и веса {0.1, 0.2, 0.7}, и он должен сделать что-то вроде этого: 1*0.1 2*0.2 3*0.7 что даст мне 2.6.
У меня нет проблем с выполнением этого 1 * 0.1, 2 * 0.2 и 3 * 0.7, но он сохраняет только последние индексы и вместо этого дает мне 2.1.
public static void main(String[] args)
{
double[] values = {1, 2, 3};
double[] weights = {0.1, 0.2, 0.7};
System.out.println(weightedSum(values, weights));
}
public static double weightedSum(double[] values, double[] weights)
{
double multiply = 0;
double sum = 0;
for (int i = 0; i < values.length; i ){
multiply = values[i]*weights[i];
}
return multiply;
}
Комментарии:
1. Поделитесь своим кодом.
2. Вам не хватает, чтобы добавить предыдущее вычисленное значение в ваш цикл for —
multiply = values[i]*weights[i];
должно бытьmultiply = values[i]*weights[i];
Ответ №1:
Вы возвращаетесь multiply
и ничего не делаете sum
. Вместо этого выполните сложение ваших множителей, а затем добавьте их в sum
. Нравится,
public static double weightedSum(double[] values, double[] weights) {
double sum = 0;
for (int i = 0; i < values.length; i ) {
sum = values[i] * weights[i];
}
return sum;
}
Комментарии:
1. Это имеет большой смысл. Спасибо.
Ответ №2:
Самым простым решением, если два массива имеют одинаковую длину, является следующее :
//Multiply two arrays of size 3 and output sum
int arr1[] = {1,2,3};
double arr2[] = {0.1, 0.2, 0.7};
final int LENGTH = 3;
double result = 0;
for(int i=0; i < LENGTH; i ) {
result = arr1[i]*arr2[i];
}
NumberFormat formatter = new DecimalFormat("#0.00");
System.out.println("The result is " formatter.format(result));
Ответ №3:
// functional style - The easiest solution as long as two arrays are of same length is following:
public static double weightedSum(double[] values, double[] weights) {
return IntStream.rangeClosed(1, values.length)
.mapToDouble( i -> values[i] * weights[i])
.sum();
}