Как добавить каждый индекс в массив после их умножения

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