Como separar os 2 numeros menores digitados

15 respostas
W

Gostaria de uma ajuda nesse code que estou fazendo.

Se eu colocar 1-2-3 - Ele ira pegar o 1-2
Agora se eu colocar 3-2-1 - Ele retorna 1-99999

Tentei colocar outra variavel para ficar com o valor de menor1 mais deu na mesma.
Desculpa se for facil isso é que estou começando em java ainda.
Quem puder me ajudar agradeço.

int i, num;
        int menor1 = 99999, menor2 = 99999;

        for (i=1;i<=3;i++)
        {
            num = Integer.parseInt(JOptionPane.showInputDialog("Entre com o número"));
            if (num <= menor1)
            
                menor1 = num;
            
            else  if (num >= menor1 && num <= menor2)
                
                    menor2 = num;
                
        }        

        JOptionPane.showMessageDialog(null, "Os 2 menores valores são: \n" +
                menor1 + "\n" + menor2);




    }

}

15 Respostas

D

Vc tem que fazer uma comparação entre os digitados, faça a leitura e depois fora do laço de leitura faça as comparações e descubra os dois menores. Se vc tem um nível mais avançado, cria um vetor com esses 3 números e orderne o vetor, aí imprime os dois primeiros números.

W

então cara vlw ai pela dica mais ñ consegui, e sou iniciante ainda em java, e ñ pode usar vetor no exercicio proposto

A

Cara, sem vetor vai ficar um pouco complicado. to pensando numa formula aqui, mas tem certeza de que não pode usar vetor nesse exercício???

ViniGodoy

Não testei, mas creio que seja isso aqui.

int menor1 = 99999, menor2 = 99999;

for (int i=1;i<=3;i++) {
   int num = Integer.parseInt(JOptionPane.showInputDialog("Entre com o número"));
   if (num < menor1 || num < menor2)
      menor2 = menor1;
      menor1 = num;
  }                
}        

JOptionPane.showMessageDialog(null, "Os 2 menores valores são: \n" +
   menor1 + "\n" + menor2);
A

Acho que esta solução do ViniGody apresentaria problema numa entrada do tipo 1-2-3…

O valor menor2 seria menor que o valor menor1…

Acho que a lógica deve ser:

  • Criar duas variaveis para os menores números: menor1 e menor2

  • Comparar se a entrada num é menor que menor1

  • Se for, menor1 vira num e num vira menor1

  • Comparar se num é menor que menor2

  • Se for menor2 vira num

ViniGodoy

AbelBueno:
Acho que esta solução do ViniGody apresentaria problema numa entrada do tipo 1-2-3…
O valor menor2 seria menor que o valor menor1…

E qual é o problema? Ele pede só os dois valores menores, não em ordem.

A

ViniGodoy:
AbelBueno:
Acho que esta solução do ViniGody apresentaria problema numa entrada do tipo 1-2-3…
O valor menor2 seria menor que o valor menor1…

E qual é o problema? Ele pede só os dois valores menores, não em ordem.

O problema seria numa entrada do tipo 1-3-2

Como menor2 sempre copia o valor de menor1, no segundo input teriamos: menor2=1, menor1=3

Ao entrar dois teríamos menor2=3, menor1=2

E o 1 seria desprezado…

PS: realmente a ordem não é importante, eu vi requisitos onde não existiam.

W

ViniGodoy
Vlw pela ajuda mais ele continua no mesmo erro ele despreza o 2ºnumero menor e pega o ultimo numero digitado e 1 numero menor somente quase do mesmo modo que sai o resultado do 1ºnumero.

fiz usando
1-2-3 ele sai 1-2
quando tento
1-90-50 ele sai 1-90

desprezando o 50 que seria o outro menor.

Eu li o enunciado do exercicio ele ta em negrito ainda que não pode ser usado vetor neste.

ViniGodoy

Tem razão. Tente usar a solução do Abel então.

Na pior das hipóteses, dá pra resolver lendo em 3 variáveis diferentes e fazer 3 ifs.

W

Nada ainda tentei usar outro if mais ai sai fora do contexto pedido…
Axo que não tem como fazer isso sem usar vetor, ou teria que usar na verdade 4 if para se comprar todos com todos.

W

Deu duplo post e ñ axei a opção de excluir..

InSeOfKn
int i, num;  
		int menor1 = 99999, menor2 = 99999;  

		for (i=1;i<=3;i++)  
		{  
			num = Integer.parseInt(JOptionPane.showInputDialog("Entre com o número"));  
			if (num <= menor1) { 
				menor2 = menor1;
				menor1 = num;
			}
			else if (num < menor2)  

				menor2 = num;  

		}          

		JOptionPane.showMessageDialog(null, "Os 2 menores valores são: \n" +  
				menor1 + "\n" + menor2);

olha testei assim e deu certo mais faz mais teste ai

até!

W

cara vlw, agora funcionou sim, so que poderia me explicar o porque, eu ñ consegui entender sendo que se ele pega o numero do menor1 seria para ter o 9999 o mesmo que ja está nele.

Milk15

Pelo que eu entendi de sua pergunta,

o menor1 não permanece com o 9999, já que ele recebe o “num” se a condição for aceita

Dando um exemplo:

num = Integer.parseInt(JOptionPane.showInputDialog(Entre com o número));

[color=green]// Supondo que num = 2  [/color]

if (num <= menor1) {  [color=green]//Se 2  <= 9999, então menor2 = menor1 e menor1 = 2, a partir dai menor1 não possui mais o valor 9999 [/color]

menor2 = menor1;

menor1 = num;

}

else if (num < menor2)
menor2 = num;

}

InSeOfKn

é pro primeiro numero não serve mas a partir do segundo já serve por exemplo ao receber:
2: menor1 = 2
menor2 = 9999

depois recebe

3 : não entrara no primeiro if

menor1 = 2
menor2 = 3

depois recebe

1 : entra no primeiro if

menor2 = menor1 = 2
menor1 = 1

viu pra que ele serve se não tivesse ao inserir 1 o menor1 ficaria com 1 mais o menor2 continuaria com 3

até!

Criado 24 de outubro de 2010
Ultima resposta 25 de out. de 2010
Respostas 15
Participantes 7