Ajudem com a lógica ai por favor

12 respostas
iigorr
public static int[] maiorMedia(int a[])
    {
        int c =0;
        for (int i=0; i<a.length;i++)
        {
            if (a[i]>calcMedia(a))
            {
                c++;
            }
    }
      
         int b[] = new int [c];         
         for (int i=0; i<a.length;i++)
        {
            if (a[i]>calcMedia(a))
            {
                for (int f=0;f<c;f++)
                {
          b[f] = a[i];
            }
        }
}
         return(b);
    }

Galera, é o seguinte, eu tenho que entrar com 10 numeros, calcular a média entre eles e exibir desses 10 os que são maiores que a média, no caso to entrando com 1 a 10 num array (de índice 0 a 9) e jogando esse array nessa função aew.... então ele teria que me retornar 6 7 8 9 10. Só que ta retornando 10 10 10 10.
A função calcMedia ta funcionando. Ja li e reli e repensei um monte de vezes. Se alguem ia puder me ajudar...
Se o problema for mto simples desculpem a ignorância.

Obrigado.

12 Respostas

thegoergen

Esse seu codigo:

for (int f=0;f<c;f++) { b[f] = a[i]; }

está sempre sobrescrevendo todos os valores que você tem em “b”, por isso retorna 10 10 10 10

T
public class IIgor {
    public static void main (String[] args) {
        double[] a = { 3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5, 8, 9, 7 };
        double media = calcMedia (a); 
        double[] valores = maiorMedia (a);
        System.out.println ("O conjunto contém " + a.length + " valores");
        System.out.println ("Media = " + media);
        for (int i = 0; i < valores.length; ++i) {
            System.out.println (valores [i]);
        }
    }
    public static double calcMedia (double[] valores) {
        double soma = 0.0;
        for (int i = 0; i < valores.length; ++i) {
            soma += valores [i];
        }
        return soma / valores.length;
    }
    public static double[] maiorMedia (double[] valores) {
        double media = calcMedia (valores);
        int maioresQueAMedia = 0;
        for (int i = 0; i < valores.length; ++i) {
            if (valores [i] > media) {
                maioresQueAMedia++;
            }
        }
        double[] ret = new double [maioresQueAMedia];
        int pos = 0;
        for (int i = 0; i < valores.length; ++i) {
            if (valores [i] > media) { 
                ret [pos] = valores [i];
                pos++;
            }
        }
        return ret;
    }
}
iigorr

Ixi hah…

ibispo

seu codigo

int f =0;   
         for (int i=0; i<a.length;i++)   
        {   
            if (a[i]>calcMedia(a))   
            {   
                   
                for (f<c; f++);   
                {   
               b[f] = a[i];   
            }   
        }

A inicialização de “f” não deveria estar dentro do laco for inicial?

iigorr
public static int[] maiorMedia(int a[])
    {
        int c =0;
        
        for (int i=0; i<a.length;i++)
        {
            if (a[i]>calcMedia(a))
            {
                c++;
            }
    }
      
         int b[] = new int [c];  
//         int f =0;
         int pos= 0;
         for (int i=0; i<a.length;i++)
        {
            if (a[i]>calcMedia(a))
            {
                
//                for (int f=0;f<c;f++)
//                {
               b[pos] = a[i];
               pos++;
//            }
        }
}
         return(b);
    }

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5
ta dando esse erro na linha 23....
pelos meus calculos agora fico mais ou menos igual ao do thingol....mas da essa p...de fora de indice

lcharallo

Acho que isso resolve o teu problema cara

eu dei uma otmizada ai agora só tem um for hehe

public static int[] maiorMedia(int entrada[])  
{  
	//Array de retorno ela tem o mesmo tamanho que a de entrada.

	int saida[] = new int [entrada.length];
	
	//variavel que guarda a média uma unica vez assim toda 
	int media = calcMedia(entrada);
	
	//conta quantas variaveis ja forão adicionadas no array de saida
	int contador = 0;
	
	//percorre o vetor de entrada

	for (int i=0; i<entrada.length;i++)
	{
		//se tiver uma variavel maior que a média
		if (entrada[i]>media)
		{
			// ela é adicionada no vetor de saida
			saida[contador]=entrada[i];
			//incrementa +1 no contador
			contador++;
 
		}
	}


return(saida);
}
lcharallo

se tiver bug aviza eu to sem IDE instalada no pc dai nem testei esse metodo XD
fiz no bloco de notas mesmo

iigorr
lcharallo:
Acho que isso resolve o teu problema cara

eu dei uma otmizada ai agora só tem um for hehe

public static int[] maiorMedia(int entrada[])  
{  
	//Array de retorno ela tem o mesmo tamanho que a de entrada.

	int saida[] = new int [entrada.length];
	
	//variavel que guarda a média uma unica vez assim toda 
	int media = calcMedia(entrada);
	
	//conta quantas variaveis ja forão adicionadas no array de saida
	int contador = 0;
	
	//percorre o vetor de entrada

	for (int i=0; i<entrada.length;i++)
	{
		//se tiver uma variavel maior que a média
		if (entrada[i]>media)
		{
			// ela é adicionada no vetor de saida
			saida[contador]=entrada[i];
			//incrementa +1 no contador
			contador++;
 
		}
	}


return(saida);
}

N ta igual ao ultimo que eu mandei?
é que assim, eu n quero só que funcione, to estudando, ai eu fiz essa lógica e n funfo....
brigado aew os caras que mandaram msgs....
continua dando erro...falando que eu to me referindo a um indice que não existe.

lcharallo

Se você conseguir fazer funcionar posta aqui

enquanto isso to vendo se consigo descobrir pq esta dando bug com os indices

você ja tentou usar um forearch em vez de um for simples para percorrer o array?

peczenyj

Vc precisa calcular a media do vetor a cada comparação ?

iigorr

lcharallo:
Se você conseguir fazer funcionar posta aqui

enquanto isso to vendo se consigo descobrir pq esta dando bug com os indices

você ja tentou usar um forearch em vez de um for simples para percorrer o array?

certo… cara…vlw…vo pega esse fds que vo te tempo pa resolve isso de qq jeito…

iigorr

Precisar não precisa… mas n influi em nd, influi?

Criado 4 de fevereiro de 2009
Ultima resposta 5 de fev. de 2009
Respostas 12
Participantes 6