Obtendo a média entre inderminado número de valores

12 respostas
G

Como poderia fazer para obter a média entre um indeterminado número de valores? tentei o seguinte:

...
public int media(int[] valores) {
    int total = valores.length, n;
    for(int i = 0;i < total;i++) {
        n += valores[i];
    }
    return n/total;
}
...
//media(1,3,4,5,2);

Só que não rolou…
sugestões sejam bem vindas

12 Respostas

dreamspeaker

Eu tô meio com sono, já, mas eu acho que n/total dá um double, e o retorno do seu método é int…

Vc diz que “não rolou”… o que “não rolou”, exatamente? Deu erro de compilação, erro de execução, o resultado tá errado… ?

Ironlynx

Esse método funciona perfeitamente(aconselho declarar como double para evitar o truncamento de casas decimais)
Seu problema deve estar na hora de passar valores p/o método.
Veja se vc não errou algo no main…

maxguzenski

mude o tipo de retorno pra double

e no retorno faz assim:
return (n/total)d ;

para passar as valores pra funcao é assim:

double resultado;
resultado = media (new int[]{1,2,3,4,5});

G

Vou publicar o codigo e voces me explicam o que estou fazendo de errado:

class MediaNumeros
{
	public int media(int[] numeros) {
		int n = 0;
		for(int i = 0;i<numeros.length;i++) {
			n += numeros[i];
		}
		return (n / numeros.length);
	}
	public static void main(String[] args) 
	{
		int[] nums = {2,4,6};
		System.out.println(media(nums));
	}
}

obs: comecei com Java final de semana passado, entao estou tentando passar algumas coisas que fazia naquelas linguagens de brincaderinha pra um troço de verdade

cv1
class MediaNumeros
{
         // Tipo de retorno int não condiz com uma divisão.
         // As divisões retornam double. :)
	public double media(int[] numeros) {
		int n = 0;
		for(int i = 0;i<numeros.length;i++) {
			n += numeros[i];
		}
		return (n / numeros.length);
	}
	public static void main(String[] args) 
	{
		int[] nums = {2,4,6};
		System.out.println(media(nums));
	}
}

Isso já deve funcionar, se eu não estiver esquecendo nada… :smiley:

G’d luck!

G

Bom, desse jeito também não funcionou, mas eu dei uma lida na mensagem de erro e acabei solucionando o problema, deveria ter postado a mensagem antes (erro meu):

Eis o Erro:
MediaNumeros.java:15: non-static method media(int[]) cannot be static context
System.out.println(media(nums));
                            >

Agora o codigo que funcionou…

class MediaNumeros 
{ 
	public static double media(int[] numeros) { 
		int n = 0; 
		for(int i = 0;i<numeros.length;i++) { 
			n += numeros[i]; 
		} 
		return (n / numeros.length); 
	} 
	public static void main(String[] args) 
	{ 
		int[] nums = {2,4,6}; 
		System.out.println(media(nums)); 
	}
}

legal, agora supondo que eu queira passar os parametros para o ‘main’ e lá ele fazer a média dos números? ainda não testei, mas tenho uma duvida, na maioria dos exemplos que vejo o ‘main’ tem uma lista de Strings como ‘arguments’ , sempre deve ser estritamente String? não pode ser integer?

cv1

Não, a assinatura do main é sempre recebendo um String[]. Voce vai ter que iterar sobre esse array e converter pra ints, o que não é tão difícil quanto parece, então eu vou deixar vc se virar um pouco :smiley:

maxguzenski

putz, e todo mundo estudando pra certificação (inclusive eu)
e niguem percebeu o erro básico de main chamando metodos nao estaticos

pra chamar o metodo sem ser estaticos é so fazer isso no teu codigo main(…)

MediaNumeros myNum = new MediaNumeros ();
System.out.println( myNum.media(array) );

G

Hehehe…
Agora me explica esse negócio de

Qualquer bla = new Qualquer();

Eu teria até como criar um Qualquer[] ?

E pelo visto Java é simpático com dot syntax né? Então da pra fazer…

Classe a = new Classe().método(param1,...,paramN);

?

maxguzenski

nao vai compilar pq a Classe a vai receber o retorno do métido (a menos que o metodo retorne uma “Classe”) e nao uma instancioa do metodo…

por exemplo, isso funciona:
int a = new QualquerClasse().metodoRetornaInt(10);

obs.: nao entendi sua primeira perguta…

G

Se eu poderia té mesmo retornar um Array de ‘Qualquer’ tipo:

Qualquer[] bla = new Qualquer(length);

A respeito, teria como você me mandar um exemplo retornando a Classe?

maxguzenski

dessa forma da:

Qualquer coisa[] = new Qualquer[10];

coisa[0] = new Qualquer();




Criado 28 de maio de 2003
Ultima resposta 2 de jun. de 2003
Respostas 12
Participantes 5