//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.publicstaticvoidmain(String[]args){Scannerin=newScanner(System.in);System.out.println("Informe a quantidade de valores que deseja declarar: ");intdeclara=in.nextInt();doublerecebido,recebidoMax=0,contador=1;for(inti=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!
P
pmlm1 like
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
E
Erierf
quando digito o maior valor primeiro e depois digito o mesmo em outra posição ele não conta.
Eu sugiro que você utilize um vetor para armazenar os valores int.
Nesse trecho, você pode utilizar, por exemplo:
Scannerin=newScanner(System.in);System.out.println("Informe a quantidade de valores que deseja declarar: ");intnumeros=in.nextInt();int[]declara=newint[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(inti=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.
E
Erierf2 likes
Funcionou certinho e consegui entender a lógica muito obrigado!!
P
Solucao aceita
pmlm2 likes
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
}elseif(recebido==recebidoMax){
contador=contador+1; // numero repetido, incrementa contador
}