Usando o laço while para descobrir o maior número de uma lista

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.

Como achar o maior número em uma lista

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++;
}

14 comentários:

Cientizta disse...

Fiz o meu assim:

public class Maior_Numero {
public static void main(String[] args) {
Scanner entrada = new Scanner(System.in);
int qti = 1;
System.out.print("Digite quantos numeros voce quer comparar: ");
int qtf = entrada.nextInt();
float maior = 0;
while (qti <= qtf) {
System.out.print("Digite o " + qti + " numero:");
float num = entrada.nextFloat();
if (num > maior) {
maior = num;
}
qti++;
}
System.out.println("O maior numero e: " + maior);
}
}





Obrigado pelo curso.. Eh excelente!

RodrigoGamer disse...

Eu fiz dessa maneira, ficou bem parecida com a do Cientisa ai
:

package Condicoes;

import java.util.Scanner;

public class MaiorNumero {
public static void main(String[] args){
float num, maior, numeroCompare;
maior = 0;
int count = 1;
Scanner entrada = new Scanner(System.in);

System.out.println("Digite quanto numeros vão ser comparados: ");
numeroCompare = entrada.nextFloat();

while (count <= numeroCompare){
System.out.print("Numero " + count + " : ");
num = entrada.nextFloat();
if(num > maior){
maior = num;
}
count++;
}
System.out.println("O maior numero digitado foi: " + maior);
}
}

Danielzinho (BERI) disse...

fiz o meu assim
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/

package maiorde10;
import java.util.Scanner;
/**
*
* @author Daniel Silveira
*/
public class Maiorde10 {

/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
System.out.println("Digite 10 numeros ");
int n=0;
float maior=0;
Scanner entrada = new Scanner(System.in);
while(n<10)
{
n+=1;
System.out.println("Digite o "+n+" numero");
float num = entrada.nextFloat();
if (num>maior)
{maior=num;}
else
{maior=maior;}
}
System.out.println("O maior numero deles é "+maior);
}

}

carlos edwygh gino da silva disse...

Pq n inicializar a variável maior com "0":

public static void main(String[] args) {
// TODO code application logic here
Scanner entrada = new Scanner(System.in);
int num
,maior=0
,count=1;

//repetição

while(count<=10){

System.out.println("Informe o número "+count);
num = entrada.nextInt();
if (num>=maior){
maior=num;
}
count++;

}
System.out.println("Maior número: "+maior);

Miroko disse...

O meu ficou assim:


package whilequalomaiorde10entradas;


import java.util.Scanner;

public class Whilequalomaiorde10entradas {


public static void main(String[] args) {

Scanner entrada = new Scanner (System.in);

int count=2;
int prox;
int maior;

System.out.println("Vamos descubrir qual o maior numero de uma lista de 10 numeros");
System.out.println("Insira o primeiro numero");
maior = entrada.nextInt();

while (count <= 10) {
System.out.println("insira o " + count + " numero");
prox = entrada.nextInt();

if (prox > maior) {
maior = prox;
}
count++;
}
System.out.println("o maior numero digitado foi " + maior );
}
}

Paraben pelo curso. Tem sido muito util.

Danielzinho, só uma dica, o seu else fica desnecessario, pois a variavel maior esta a atribuir o mesmo valor a ela propria. (assignment to itsel)

Igor Porto Fernandes disse...

//4. Construa um algoritmo que leia cem números e mostre qual o maior número que foi lido.

package Exercício4;

import java.util.Scanner;

public class principal {

public static void main(String[] args) {
// TODO Auto-generated method stub
double op=0, maior=0;

Scanner entrada=new Scanner(System.in);

for (int i=0; i<=100; i++){

System.out.println("Digite um número: ");
op=entrada.nextDouble();
if(maior<op){
maior=op;
}
}
System.out.println("O maior valor digitado foi: "+maior);
}

}

Marcelo Schnaibel disse...

Se iniciarmos a variável maior com o número zero, e não com o primeiro elemento da lista, o programa não funcionará adequadamente para listas nas quais todos os números forem negativos...

smokemachine disse...

package pkg10numeros;
import java.util.Scanner;
/**
*
* @author Hugo
*/
public class Main {

/**
* @param args the command line arguments
*/
public static void main(String[] args)
{
Scanner entrada = new Scanner(System.in);

int numero,numero2,contagem;

contagem = 2;

System.out.printf("\nIntroduza Nr 1 ::: ");
numero = entrada.nextInt();
while (contagem<6)

{
System.out.printf("\nIntroduza Nr %d ::: ",contagem);
numero2= entrada.nextInt();

if (numero>numero2)
{
numero=numero;
}
else
{
numero=numero2;
}
contagem = contagem+1;
}
System.out.printf("O MAIOR É O %d\n", numero);

// TODO code application logic here
}

}

Anônimo disse...

O meu ficou assim:

public static void main(String[] args) {
Scanner numeros = new Scanner(System.in);
int num, maior = 0, count = 1;

while (count <= 10){
System.out.print("Informe o número de posição " + count + ".\n");
num = numeros.nextInt();
if (num > maior){
maior = num;
}
count++;
}
System.out.print("O maior número de todos é o: " + maior + ".\n");

}

Muito obrigado pelo curso. Estou aprendendo aqui o que nem sonhei aprender na faculdade.

D, disse...

Fiz direto a de mostrar os 2 maiores números...

Ficou dessa maneira:


public static void main(String[] args) {

Scanner _e = new Scanner(System.in);
float _b = 0,_c = 0,_d = 0;
int _a = 2;

System.out.println("Digite o primeiro número:");
_b = _e.nextFloat();
_c = _b;
while (_a <= 5) {

System.out.println("Digite o número " + _a + ":");
_b = _e.nextFloat();
if (_c < _b) {
_d = _c;
_c = _b;
}
_a++;
}
if ((_b < _c) && (_d < _b)) { _d = _b; }
System.out.println("O maior número foi " + _c);
System.out.println("O segundo maior número foi " + _d);

}

J.F.M. disse...

Scanner input = new Scanner(System.in);

int count = 1;
int num;
int maior=0;

while(count<=10)
{
System.out.println("Digite o "+count+"º numero:");
num = input.nextInt();
if(num>maior)
maior = num;
count++;
}

System.out.println("O maior numero é: "+maior);

Thiago Rodrigo Oliveira Diorgenis disse...

Conseguir fazer um programa para somar P.G. com dados de fora olha ai:
import java.util.Scanner;

public class Atribuicao {



public static void main(String[] args) {
float
quociente,
valor_max;

int inicial;


Scanner entrada = new Scanner(System.in);

System.out.printf("P.G valor inicial: ");
inicial = entrada.nextInt();

System.out.printf("P.G razão: ");
quociente = entrada.nextFloat();

System.out.printf("P.G menores que: ");
valor_max = entrada.nextFloat();

System.out.printf("Elementos da PG, de valor inicial " +inicial+" e razão "+quociente+", menores que " +valor_max+"\n" );
while(inicial<=valor_max){

System.out.println(inicial*=quociente);

}
}

}

Anônimo disse...

vey, muito bom o conteúdo e ensino, vlw, muito obgd mesmo. Eu tenho uma duvida sobre como achar os dois maiores números, eu to tentando fazer e meu algorítimo ta ficando muito grande, já tem 450 linhas e eu ainda n terminei, n consigo pensar em outra forma d resolver ele por isso gostaria que se vc poder fazer a resposta de como achar os dois maiores números, com as características de se os dois maiores números forem iguais, ou se os dois segundos maiores números forem iguais. agradeço desde já.

THIAGO SILVA disse...

Demorei um pouco mas foi!

package cont2;
import java.util.Scanner;

public class Cont2 {
public static void main(String[] args) {
int razao =1,
qtde =1,
max,
max2 = 0,
novo;

Scanner entrada = new Scanner(System.in);
System.out.print("Número máximo\n");
max = entrada.nextInt();

while(qtde<=max){
System.out.print("Digite o" +qtde +"numero\n");
novo = entrada.nextInt();

if (novo>max2){
max2=novo;
}
qtde+=razao;
}
System.out.printf("O número máximo é %d\n", max2);



}}

Dicas e Novidades de Java por e-mail

Sabe quanto custa um bom livro de java?
Entre R$ 100,00 e R$300,00

Sabe quanto custa um bom curso presencial de Java?
Entre R$ 1.500,00 até R$ 4.000,00

Sabe quanto custa estudar pelo Java Progressivo?
Absolutamente nada.

Porém, também precisamos de sua ajuda e apoio.
Para isso, basta curtir nossa Fan Page e clicar no botão G+ do Google.