Criando um método que recebe Array

2 respostas
E

Meu objetivo é criar um método que recebe um array de double e retorne sua média, mas não consigo percorrer o array! segue o código.

public class Exercicio4 { 
    double media(double[] a) { 
        double media = 0; 
        if (a.length < 2) { 
            System.out.println("O array deve possuir pelo menos 2 elementos."); 
        } 

        doublemediaFinal = 0; 
        for (double i = 0 ; i <= a.length ; i++) { 
            double guardaSomador = 0; 
            double somador = a[i] + a[i++]; 
            guardaSomador += somador; 
            mediaFinal = guardaSomador / a.length; 
        } 

        return mediaFinal; 
    }

tá dizendo q o erro tá na parte "somador = a[i] + a[i++], dizendo que é incompatível e que poderá haver perda de precisão na conversão de double pra int, MAS NAO TEM NENHUM INT! a não ser o i, mas o i é só para a posição!
como eu faço?

2 Respostas

E

Estranhamente consegui.
é só declarar o “i” dentro do for, como int, agora, por que?

ViniGodoy

Seu código está muito equivocado. A média é simplesmente a soma de todos os elementos, dividido pelo total de elementos. A média de um conjunto vazio é 0.

O método para calculo da média, é, portanto:

public class Exercicio4 { 
    double media(double[] a) { 
        if (a.length == 0) { 
            return 0;
        } 

        //Soma o valor de todos os elementos
        double soma = 0; 
        for (int i = 0; i &lt; a.length; i++) { 
             soma += a[i]; 
        } 

        //Calcula a média e retorna
        return soma / a.length; 
    } 
}
Vou colocar seu código abaixo e comentar linha-a-linha alguns dos enganos:
public class Exercicio4 { 
    double media(double[] a) { 
        double media = 0;  //Essa variável não foi usada para nada
        if (a.length &lt; 2) { 
            System.out.println(&quot;O array deve possuir pelo menos 2 elementos.&quot;); 
        } 

        doublemediaFinal = 0; 
        //A variável i será usada para o índice do array a[i], portanto, deve ser int, e não double.
        //Além disso, o último índice de um array é a[length]. Por isso, o for não deve usar &lt;=, só &lt;
        for (double i = 0 ; i &lt;= a.length ; i++) { 
            //Variáveis declaradas dentro do for só duram até o fim do for.
            //A variável guardaSomador será zerada a cada loop
            double guardaSomador = 0; 
            //Esse código está somando a[i] com a[i]. O ++ só soma 1 ao i após o comando

            //Agora, mesmo que você corrigisse para i+1, aqui você estaria somando cada par de números 
            //a[0] com a[1]. No segundo passo do for a[1] com a[2], no terceiro a[2] com a[3]. 
            //Perceba que cada número é somado 2 vezes na conta, e não uma.
            double somador = a[i] + a[i++]; 

            guardaSomador += somador; 

            //A média só precisa ser divida uma vez, não a cada número somado.
            mediaFinal = guardaSomador / a.length; 
        } 

        return mediaFinal; 
    }

Seu problema no exercício não foi só programação, foi com a matemática básica. Procure revisa-la.

Criado 15 de maio de 2015
Ultima resposta 15 de mai. de 2015
Respostas 2
Participantes 2