Programação Progressiva

Fórum para dúvidas dos sites: Programação Progressiva, Java Progressivo, C Progressivo


Você não está conectado. Conecte-se ou registre-se

6. Achando os dois maiores números

Ver o tópico anterior Ver o tópico seguinte Ir em baixo  Mensagem [Página 1 de 1]

1 6. Achando os dois maiores números em Qui Maio 29, 2014 5:03 am

6. Achando os dois maiores números

Escreva um programa em Java que solicita 10 números ao usuário, através de um laço while, e ao final
mostre os dois maiores números digitados pelo usuário.

Alguém pode me ajudar com esse exercício? Não estou conseguindo ter a logica para usar corretamente if e while.
Se alguém souber me ajuda :/

Ver perfil do usuário

2 Re: 6. Achando os dois maiores números em Qua Jun 18, 2014 11:58 pm

import java.util.Scanner;
/**
*
* @author Rodrigo
*/
public class Exercicio6 {
public static void main(String[]args){
Scanner entrada = new Scanner(System.in);
float num;
float maior=0;
float maior2=0;
int count;

for(count=1;count<=10;count++){
System.out.println("Digite os numeros");
num=entrada.nextFloat();
if(num>maior){
maior2=maior;
maior=num;
}
}
System.out.println("O maior numero é"+ maior);
System.out.println("O segundo maior numero é"+ maior2);
}
}

Ver perfil do usuário

3 Re: 6. Achando os dois maiores números em Seg Ago 11, 2014 12:05 am

Boa noite a todos,

antes de mais , obrigado digoshirota, pois eu tinha bloqueado, e so de dar uma passagem no teu codigo deu para perceber onde estava o meu erro, e qual o problema da minha logica.

Começando pelo principio:

o meu primeiro codigo ficou assim:

Código:

import java.util.Scanner;


public class While2maioresdeumalista {
      public static void main(String[] args) {
        
       Scanner entrada = new Scanner (System.in);
    
    int count=2;
    int prox;
    int maior;
    int comparar;
    int maior2=0;
    
    System.out.println("Vamos descubrir qual o maior numero de uma lista ");
    System.out.println("Quantos numeros quer comparar?");
        comparar = entrada.nextInt();
        
    System.out.println("Insira o primeiro numero");
        maior = entrada.nextInt();
        
        while (count <= comparar) {
               System.out.println("insira o " + count + " numero");
        prox = entrada.nextInt();
        
               if (prox > maior) {
                   maior = prox;
              
              
               } else {
                  
                   if ((prox > maior2) && (prox < maior)) {
                       maior2 = prox;
                   }
               }  
              
         count++;
        }
        
             System.out.println("o maior numero digitado foi " + maior );
             System.out.println("o 2º maior numero digitado foi " + maior2 );
    
    }
    
}

o problema era, so funcionava tudo certo se o utilizador digita-se em primeiro lugar o "maior" e de seguida o "2º maior".

Se o utilizador digita-se em primeiro o "2º maior" e depois o "maior"  quando imprimia os resultados mostrava o "maior" como sendo na realidade o maior, mas imprimia o "2º maior" com o valor das proximas entradas sem considerar as entradas antes do maior numero de todos.
para exemplificar deixo um exemplo:

utilizador escolhe comparar 5 numeros. e digita o maior antes de digitar o 2º maior
1 = 1
2=  345
3=  34
4=  54
5=  12

maior =   345     2º maior = 54

assim funcionava tudo bem sem nenhum problema.

Mas se o utilizador escolhe comparar 5 numeros. e digita em 1º lugar o "2º maior numero" e só depois o "maior" :

1= 3
2= 45
3= 14
4= 1456
5= 35

maior = 1456      2º maior = 35

Bloqueei aqui durante umas 2 horas a tentar resolver mas sem sucesso.
E como ja tinha dito, percebi o meu erro e a falha na minha logica, e então o meu codigo final ficou assim:

Código:

import java.util.Scanner;


public class While2maioresdeumalista {

 public static void main(String[] args) {
        
        
Scanner entrada = new Scanner (System.in);
    
    
    int count=2;
    int prox;
    int maior;
    int comparar;
    int maior2=0;
    
    System.out.println("Vamos descubrir qual o maior numero de uma lista ");
    System.out.println("Quantos numeros quer comparar?");
        comparar = entrada.nextInt();
        
    System.out.println("Insira o primeiro numero");
        maior = entrada.nextInt();
        
        while (count <= comparar) {
               System.out.println("insira o " + count + " numero");
        prox = entrada.nextInt();
        
               if (prox > maior) {
                   maior2 = maior;
                   maior = prox;
              
               } else {
                   if (prox > maior2) {
                       maior2= prox;
                   }
               }
              
         count++;
        }
        
             System.out.println("o maior numero digitado foi " + maior );
             System.out.println("o 2º maior numero digitado foi " + maior2 );
        
    }
    
}

basicamente o que me faltava era a linha "maior2 = maior" no primeiro "if" para garantir que a variavel "Maior2" armazenava sempre o valor da variavel "maior" sempre que esta fosse substituida por uma entrada maior.

Parecia complicado mais afinal nem era.  Razz


DIGOSHIROTA,

entretanto reparei que o teu codigo sofre do mesmo bug que o meu primeiro codigo sofria.

ou seja, se o "2º maior numero" for digitado antes do "maior numero" :
imprime tudo certinho

mas se "2º maior numero" for digitado apos o "maior numero":
ele imprime o "maior" certinho, mas o segundo maior numero imprimido vem com bug, porque o programa nao considera nenhum numero intruduzido antes do "maior" e para o programa o "2º maior" passa a ser o proximo maior depois da entrada do maior.

Assim parece confuso, mas testa o teu codigo desta maneira:

entrada 1 = 1
enrtada 2 = 145
entrada 3= 12
entrada 4 = 1456
entrada 5 = 34
entrada 6 = 56
entrada 7= 78
entrada 8= 34
entrada 9=23
entrada 10= 89

resultado: maior = 1456 2º maior = 145

assim da tudo certo.

mas se testar assim:

entrada 1 = 34
enrtada 2 = 45
entrada 3= 1456
entrada 4 = 57
entrada 5 = 134
entrada 6 = 67
entrada 7= 45
entrada 8= 98
entrada 9= 34
entrada 10= 12

resultado: maior = 1456 2º maior = 45

exactamente o mesmo bug que me aparecia

Ver perfil do usuário

Conteúdo patrocinado


Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo  Mensagem [Página 1 de 1]

Permissão deste fórum:
Você não pode responder aos tópicos neste fórum