Bug na hora de contar o maior valor

//Escreva um algoritmo que leia certa quantidade de números e imprima o maior deles e quantas vezes o maior numero foi lido. A quantidade de números a serem lidos deve ser fornecidos pelo usuário.
public static void main(String[] args) {
		Scanner in = new Scanner (System.in);
		System.out.println("Informe a quantidade de valores que deseja declarar: ");
		int declara = in.nextInt();
		double recebido, recebidoMax =0, contador =1;
		for(int i = 0; i < declara; i ++) {
			System.out.println("Informe o "+ (i+1)+"ª valor");
			recebido = in.nextDouble();
			if(recebido > recebidoMax) {
				recebidoMax = recebido;
				contador = contador + 1;
				
			}
		}
		System.out.println("Maior valor recebido = "+recebidoMax);
		System.out.println("Quantas vezes o maior número de repete = "+ contador);
		in.close();
	}
  • no console seu o usuário digita o maior primeiro ele não consegue contar o mesmo valor se houver repetição, em outros casos o código funciona. Agradeço desde já que puder me auxiliar.

Eu fiz alguns testes com o código e não achei o erro especificado, talvez eu não tenha interpretado direito.
Mas, nos testes que eu fiz eu achei alguns resultados que não estavam 100% corretos e fiz umas modificações.
Você pode primeiro armazenar os números digitados em um array de números, depois fazer dois loops for: um que encontre o maior número e outro que verifique quantas vezes ele se repete.
Testei isso e funcionou perfeitamente!

Estás a usar o teu contador para contar o número de vezes que trocaste de maior valor e não quantas vezes o maior valor foi recebido.

Quando recebes um valor tens três hipóteses:

  • o número é maior do que o teu maior valor atual: atualiza o maior valor e coloca contador a 1 (é a primeira ocorrência do número)
  • o número é igual ao teu de maior valor: incrementa o contador com +1 (nova ocorrência do maior valor)
  • o número é menor do que o teu maior valor: não faz nada, continua para o número seguinte
1 curtida

quando digito o maior valor primeiro e depois digito o mesmo em outra posição ele não conta.
image

Tenta fazer aquilo que eu falei, deve funcionar.

Olá, @Erierf!

Eu sugiro que você utilize um vetor para armazenar os valores int.

Nesse trecho, você pode utilizar, por exemplo:

	Scanner in = new Scanner(System.in);
	System.out.println("Informe a quantidade de valores que deseja declarar: ");
	int numeros = in.nextInt();
	int[] declara = new int[numeros]

Uma dica: não inicie um contador com um valor fixo que não seja 0, também por isso, seu resultado não esta saindo como deveria.

E aí, para preencher o vetor:

	for (int i = 0; i < numeros; i++) {
		System.out.println("Informe o " + (i + 1) + "ª valor");
		declara[i] = in.nextInt();
		if (declara[i] >= recebidoMax) {
			recebidoMax = declara[i];
			contador += 1;
		}
	}

Normalmente, quando vamos armazenar vários dados do mesmo tipo (nesse caso, números inteiros) inseridos pelo usuário, usamos Arrays, como Vetores e Matrizes, isso ajuda muito.

Já para esse trecho:

Acontece por conta dessa condição:

Resolveria se você escrevesse: if(recebido >= recebioMax). Dessa forma, se o usuário entrar com o mesmo número todas as vezes, o contador fará seu trabalho corretamente.

Espero ter ajudado! Boa noite.

1 curtida

Funcionou certinho e consegui entender a lógica muito obrigado!!

2 curtidas

Se testares esse código com 1 2 3 4 5 vai dizer que o maior é 5 e ocorreu 5 vezes

Necessita sempre de separar os casos de novo maior ou igual ao maior

if(recebido > recebidoMax) {
    recebidoMax = recebido;
    contador = 1; // é a primeira ocorrência do recebidoMax 
} else if(recebido == recebidoMax) {
    contador = contador + 1; // numero repetido, incrementa contador
}
2 curtidas

Muito bem colocado, @pmlm!