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.
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