Somma elementi al quadrato arraylist

di Bovy98 il
1 risposte

Creare un programma che legga una serie di valori numerici da tastiera (non necessariamente interi). L'inserimento termina quando viene inserito il valore 0.
Il programma dovra` calcolare e stampare la media dei quadrati di tutti i numeri inseriti. Ad esempio, se vengono inseriti 1, 2.5, -3, 0 il programma dovra` stampare (1^2 + (2.5)^2 + (-3)^2) / 3 = 5.41666666666666

io ho fatto questo ma il risultato non viene come dovrebbe, ho potuto confermare facendo il programma senza arraylist.

import java.util.*;

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

        double n = 0;

        ArrayList<Double> lista = new ArrayList<>();

        do {

            System.out.println("Inserisci un numero: ");
            n = scan.nextDouble();
            lista.add(n);
            if (n == 0)
                break;

        } while (true);

        double pot = 0;

        int count = 0;

        for (int i = 0; i < lista.size(); i++) {
            double number = lista.get(i);
            pot = pot + (number * number);
            count++;
        }

        System.out.println("risultato: " + pot / count); //(pot / lista.size())
    }
}

1 Risposte

  • Il motivo per cui il risultato non torna è semplicissimo: quando l'utente introduce il valore 0 per terminare la sequenza, tu vai ad inserire tale valore nell'ArrayList. Di conseguenza, poi, nel calcolo vai a sommare 0^2 (che non cambia la somma) e incrementi il count anche per il valore 0. Quindi, invece di calcolare la media su 3 valori, la vai a calcolare su 4.

    La cosa si risolve semplicemente verificando il valore digitato PRIMA dell'inserimento nellArrayList. Se l'utente inserisce 0, non devi aggiungerlo.

Devi accedere o registrarti per scrivere nel forum
1 risposte