Preciso de Ajuda.. Aprender cod/java

2 respostas
F

/*[MUITO OBRIGADO] Estou aprendendo java. E gostaria de algumas dicas..
Antes eu pedi ajuda aqui.. e me deram uma grande força.. eu tenho muito problema com a lógica ainda..
Mais tenho muita vontade de aprender.. Obrigado ..

[PEÇO AGORA]... tenho um exercicio que eu tentei fazer.. mais acho q a logica esta meio errada..
se puderem me ajudar muito obrigadohh!! :grin:

[EXERCICIO] Escreva um programa que retorne a moda (valor mais freqüente) de um
array de inteiros.

[ O QUE EU FIZ ]
package listaDeExerciciosRomolu;*/

public class exercicio4 {
	static int x=0,y=0;
	public int comparaModa(int[] vet1){
		for(int i=0;i<vet1.length;i++){
			for(int j=0;j<vet1.length;j++)
				if (vet1[i]==vet1[j])
					x=+1;
		return vet1[i];
		}
		return 0;
	}
	public static void main(String[]args){
		int[]array={4,6,8,6,9};
		exercicio4 a = new exercicio4();
		a.comparaModa(array);
		System.out.println(x);
	}
}

// MUITO OBRIGADO

2 Respostas

T
Olá, Fábio, espero que não esteja respondendo muito tarde. Se não me enganei, a sua função deve ler o vetor, ver qual dos valores se repete mais vezes e retornar esse valor, certo? Primeiramente, vou apontar os erros da sua função. Ao fazer o primeiro return, você fez com que a sua função comparasse apenas o primeiro valor com o resto do vetor, ao contrário do que deveria fazer, comparar cada item com o vetor inteiro. Segundo, ele retorna quantas vezes esse item se repete, e não o item em si (não sei se isso é um erro ou não). Terceiro, após saber quantas vezes o item se repete, você deve saber se ele é o que se repete mais, o que seu código não faz. Então eu mastiguei suas dúvidas e refiz seu código. :oops:
public int comparaModa(int[] vet1){
		int maiorFrequencia = -1, itemMaisFrequente=-1;
		int atual=0;
		for(int i=0;i<vet1.length;i++)
		{
			for(int j=0;j<vet1.length;j++)
			{
				if (vet1[i]==vet1[j])
					atual++;
			}
			if (maiorFrequencia < atual) {
				itemMaisFrequente = i;
				maiorFrequencia = atual;
			}
			atual=0;
		}
		
		return itemMaisFrequente;
	}
Então, como você pode ver, o primeiro for pega o primeiro item, compara com todos os valores (incluindo ele mesmo), e se encontrar algum igual, ele incrementa atual, que é a quantidade de vezes que ele se repete. Após testar com todos, ele testa se essa frequência foi maior que a anterior, e se for, ele seta o índice do item atual para itemMaisFrequente (poderia ser o valor direto também) e a frequência para maiorFrequencia. Depois, ele seta atual para zero novamente e passa a uma nova interação. Ao final dos for's, você terá o itemMaisFrequente e a maiorFrequencia, com que ele se repete. Retornei o itemMaisFrequente em vez de usar static x como você fez, isso cabe a você. Dessa maneira, você deve modificar o main:
public static void main(String[]args){
		int[]array={4,6,8,6,9};
		Exercicio4 a = new Exercicio4();
		int itemMaisFrequente = a.comparaModa(array);
		System.out.println("O valor mais frequente é: "+array[itemMaisFrequente]);
	}
Um problema desse código é que ele pega o primeiro valor mais frequente, e caso encontre outro com a mesma frequência, ele simplesmente ignora. Mas isso deixa o código um pouco mais complicado e não sei se você precisa disso.

Me avisa se funcionar =)

[]'s

//TheMadJava

J

Na realidade acho que você precisa quardar a frequência de cada numero em um array auxiliar, e depois ver qual é o maior valor do array. Tenho o codigo funcionando aqui, mas é melhor você tentar fazer, qualquer coisa é só perguntar.

Criado 16 de março de 2008
Ultima resposta 19 de mar. de 2008
Respostas 2
Participantes 3