Como comparar maior e menor em java

Posts

Explique o problema em si. � pra identificar o maior n�mero em um vetor? Entre dois n�meros? Ou seja, qual � o problema?

Ler 3 ou mais numeros e informar quem � o maior...depois tento desenrolar o resto. obrigada.

Nesse caso, sendo a quantidade de n�meros fixa e baixa, compensa mais utilizar alguns IFs (n�o ser�o muitos). Se forem mais n�meros, principalmente se for uma quantidade indefinida, a� seria mais interessante usar um array.

Segue o c�digo que captura o maior n�mero digitado:

import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.List; public class MaiorNumero { /** * @param args * @throws IOException * @throws NumberFormatException */ public static void main(String[] args) throws NumberFormatException, IOException { BufferedReader rd = new BufferedReader(new InputStreamReader(System.in)); List<Integer> numeros = new ArrayList<Integer>(); int n = -1; do{ System.out.print("Digite o n�mero (-1 para mostrar o maior n�mero): "); n = Integer.parseInt(rd.readLine()); if (n == -1){ System.out.println("Maior numero �: "+retornaMaiorValor(numeros)); }else{ numeros.add(n); } }while(n != -1); } public static int retornaMaiorValor(List<Integer> numeros){ int aux = 0; for (int i = 0; i < numeros.size(); i ++){ if (numeros.get(i) > aux){ aux = numeros.get(i); } } return aux; } }

Funcionou legal...apartir dai a logica � a mesma para mostrar tambem o menor numero digitado?

Sim, o �nico local que voc� vai mudar � aqui:

if (numeros.get(i) < aux){ aux = numeros.get(i); }

Colocando o sinal de "<" (menor).

pronto, � s� renomear a variavel? encontrei um exemplo, me diz o que acha dele:

if (numero1 > numero2 && numero1 > numero3 ||numero1 > numero3 && numero1 > numero2 ){ System.out.print("o primeiro numero: " + numero1 +" � o numero maior dos 3\n"); }

se fosse utilizar seria com varios if�s.

pronto, � s� renomear a variavel? encontrei um exemplo, me diz o que acha dele:

if (numero1 > numero2 && numero1 > numero3 ||numero1 > numero3 && numero1 > numero2 ){ System.out.print("o primeiro numero: " + numero1 +" � o numero maior dos 3\n"); }

se fosse utilizar seria com varios if�s.

Este � exemplo � limitado. Se voc� tiver 100 valores ? Vai fazer 100 ifs ?

o que ti passei serve para 2 valores ou 1 milh�o de valores.

Pensando bem � isso mesmo, mas se for um exemplo simples, com poucos numeros. a melhor op��o � o if que citou?

Continuo dizendo que n�o. Sempre trabalhe em solu��es gen�ricas, a forma que voc� apresentou n�o � otimizada de tiver mais que 5 valores, se for apenas 2 ou 3 ent�o voc� pode usar sua solu��o.

As vezes me confundo com essa forma otimizada, sempre o codigo mais "curto" � melhor, tem como saber se a otimiza��o � valida atraves do debbug?

As vezes me confundo com essa forma otimizada, sempre o codigo mais "curto" � melhor, tem como saber se a otimiza��o � valida atraves do debbug?

"Sempre o c�digo mais curto � melhor". Essa afirma��o n�o confere. C�digo curto n�o � sin�nimo de otimiza��o e nunca ser�, prova disso � que algoritmos de ordena��es mais complexos como o HEAP SORT s�o muito melhores que um INSERTION SORT que � bem mais simples e "curto". Voc� sabe se seu algoritmo � otimizado (melhor que um outro ou executa em tempo h�bil) atrav�s do c�lculo de complexidade do algoritmo, estude o pior caso, melhor caso e caso m�dio do seu algoritmo e categorize o desempenho como logaritm�ntico, exponencial e etc.

Estude isso: http://pt.wikipedia.org/wiki/Complexidade_computacional

Na "m�o" mesmo � que sabemos se est� bom? legal Ronaldo, pensei que pudesse ser visualizado com ajuda de algo. obrigada pela dica.

Na "m�o" mesmo � que sabemos se est� bom? legal Ronaldo, pensei que pudesse ser visualizado com ajuda de algo. obrigada pela dica.

UP!!! perguntinha...

Na "m�o" mesmo � que sabemos se est� bom? legal Ronaldo, pensei que pudesse ser visualizado com ajuda de algo. obrigada pela dica.

Voc� tem que fazer testes de performance, medindo o tempo de execu��o dos algoritmos. Levando em considera��o que existem varia��es: Melhor Caso, Pior Caso e Caso M�dio.

Nesse tutorial de nossa apostila de Java, vamos resolver uma questão proposta em nossa lista de exercícios sobre o laço while: http://www.javaprogressivo.net/2012/08/questoes-usando-o-laco-while-java.html Essa questão gerou dúvidas, em mais de um de nossos leitores, então vamos resolver e comentar ela, passo-a-passo.

Durante toda sua carreira como programador Java, ou simplesmente amante de programação, vai ser necessário você utilizar algoritmos (idéias) para descobrir qual o maior ou menor número de uma lista, portanto é muito importante que você tenha tentado resolver este exercício, e que realmente aprenda sua solução.

O enunciando do exercício que vamos resolver é esse:

5. Achando o maior número
Achar o maior, menor, média e organizar números ou sequências são os algoritmos mais importantes e estudados em Computação. Em Java não poderia ser diferente.
Em nosso curso, obviamente, também não será diferente.

Escreva um programa em Java que solicita 10 números ao usuário, através de um laço while, e ao final
Resolução comentada do exercício
A ideia principal desse tipo de algoritmo é a seguinte: a cada vez que o usuário fornecer um número, comparamos este com o valor que está armazenado na variável 'maior'.
Ou seja, vamos usar um teste condicional if dentro de um laço while.
Então vamos lá.
Uma solução pra isso é o que vamos fazer no seguinte código, ou seja, o primeiro número digitado pelo usuário ficará armazenado na variável 'maior'. Ora, se aquele é o primeiro valor fornecido, é também o maior que já foi fornecido, concorda?
Dentro do laço while, a primeira coisa que fazemos é pedir o número ao usuário, que ficará armazenado na variável 'num'.
Se for maior, fazemos 'maior = num', para que essa variável agora armazene o novo número, que é maior.
Ao fim do laço, exibimos o valor da variável 'maior', que deverá ter o maior número fornecido.

mostre qual destes números é o maior.

Vamos usar uma variável chamada 'maior', que vai sempre armazenar o maior número fornecido pelo usuário.
Vamos usar outra, chamada 'num', que será usada para receber todos os 10 números pelo usuário.

Se o novo número fornecido por ele for maior que 'maior', fazemos com a variável 'maior' mude de valor, agora será esse novo número que ele digitou.


Como vamos usar o laço WHILE, vamos usar um pequeno truque.
Lembre-se que vamos comparar os números fornecidos pelo usuário com o valor que está na variável 'maior'. Mas e o primeiro número digitado por ele? Vamos comparar com que valor, já que a variável 'maior' nem foi usada ainda?


Agora vamos entrar no laço while, que deverá contar 9 números, pois um número já foi fornecido.
Por isso, inicializamos nosso contador com o valor 'count=2', para que ele possa contar do número 2 até o 10, dentro do laço while.

Após feito isso, vamos comparar o número 'num' com o número 'maior', pra saber se este novo número fornecido é maior que o 'maior'.

Caso não seja, nada ocorre.
Em qualquer caso, não esqueçamos de incrementar a variável 'count'.

Veja como ficou nosso código java
import java.util.Scanner; public class maiorNumeroWhile{   public static void main(String[] args){ float maior, num; int count=2; Scanner entrada = new Scanner(System.in);   System.out.print("Numero 1: "); num = entrada.nextFloat(); maior = num;   while(count <= 10){ System.out.print("Numero " + count + ": "); num = entrada.nextFloat();   if(num > maior){ maior = num; }   count++; }   System.out.println("O maior numero digitado é: "+maior);   } } Mas como havíamos dito, fizemos uma espécie de 'truque', fazendo com o primeiro número ficasse armazenado na variável 'maior'.

Mas em programação, não existe apenas uma ideia, apenas uma maneira de fazer as coisas.
Programar é usar a criatividade, criar soluções diferentes.

Poderíamos fazer isso de outra maneira, apenas usando o laço while.
Porém, não podemos comparar o primeiro número com a variável 'maior', pois esta ainda está vazia.

Então, uma possível solução é fazer o seguinte: colocar outro laço condicional dentro do laço while.
Nesse novo IF, testamos se o número que o usuário vai fornecer é o primeiro (count=1), se for, o valor fornecido vai direto para a variável 'maior', em vez de ir para a 'num';
Assim, nossa contador 'count' começa do número 1, e não mais do 2.

Caso não seja o primeiro número, caímos no ELSE do teste condicional, que nada mais é o que aconteceria, no WHILE antigo, apresentado no código anterior.
Porém, agora temos que inicializar o valor de 'maior'.

Ou seja, o que fizemos aqui foi é colocar o primeiro número digitado dentro da variável 'maior', e caso não seja o primeiro, vai pra variável 'num' e depois vai ser testado para checar se este 'num' é o maior ou não.
Veja como ficaria nosso laço while:
while(count <= 10){   System.out.print("Numero " + count + ": ");   if(count == 1){ maior = entrada.nextFloat(); }else{ num = entrada.nextFloat();   if(num > maior){ maior = num; } }   count++; }