Deitel - exercício 4.23

Srs, boa noite. Fiquei um tempo sem ler poder fazer os exercícios e agora estou retornando, porém, não estou conseguindo resolver o exercício 4.23 do livro do Deitel. O maior número consigo encontrar, porém o segundo maior não consigo. Alguém poderia me ajudar na solução do algoritmo ? Agradeço antecipadamente. Segue abaixo:

/*4.23 Utilizando uma abordagem semelhante àquela do Exercício 4.21,encontre os dois maiores valores entre os
 *10 valores inseridos.[Nota:Você só pode inserir cada número uma só vez.]
 */

import java.util.Scanner;

public class MaiorDois
{
    Scanner entrada = new Scanner(System.in);

    private int numero;
    private int contador = 1;
    private int primeiroMaior;
    private int segundoMaior;

    public void calcula()
    {
        
        while(contador<=10)
        {
            System.out.printf("Digite um numero: ");
            numero = entrada.nextInt();
            

                if(numero > primeiroMaior)
                {
                  primeiroMaior = numero;
                }

                else if(numero < primeiroMaior)
                {
                  segundoMaior = numero;
                }

             contador++;
                     
        }

         System.out.printf("O primeiro número maior é: %d\n", primeiroMaior);
         System.out.printf("O segundo número maior é: %d\n", segundoMaior);

     }
 

}

Vejamos se da certo…

/*4.23 Utilizando uma abordagem semelhante àquela do Exercício 4.21,encontre os dois maiores valores entre os
 *10 valores inseridos.[Nota:Você só pode inserir cada número uma só vez.]
 */

import java.util.Scanner;

public class MaiorDois
{
    Scanner entrada = new Scanner(System.in);

    private int numero;
    private int contador = 1;
    private int primeiroMaior;
    private int segundoMaior;

    public void calcula()
    {
        
        while(contador<=10)
        {
            System.out.printf("Digite um numero: ");
            numero = entrada.nextInt();
            

                if(numero > primeiroMaior)
                {
                  primeiroMaior = numero;
                }

                if(numero < primeiroMaior && numero > segundoMenor)
                {
                  segundoMaior = numero;
                }

             contador++;
                     
        }

         System.out.printf("O primeiro número maior é: %d\n", primeiroMaior);
         System.out.printf("O segundo número maior é: %d\n", segundoMaior);

     }
 

}

Abraços.

Dica: O segundo maior é o antigo maior número.

Meu amigo, valeu. Fiz de uma outra forma e deu certo também, mas como você fez foi muitissimo mais fácil
Abs,
Paulo

Fiz assim:
Axo que seria o jeito mais correto “javamente” para fazer isso…
Assim, se a pessoa quizer mudar a quantidade de números, é só mudar a segundo linha…
E se a pessoa digitar dois numeros iguais, ela ignora, e pega realmente, o SEGUNDO maior…

[code] Scanner scan = new Scanner(System.in);
int[] numeros = new int[10];
int cont = 0;
int primeiromaior = 0, segundomaior = 0;

	for (cont = 0; cont < numeros.length; cont++) {
		System.out.println("Digite um numero");
		numeros[cont] = scan.nextInt();

		if (numeros[cont]> primeiromaior) {
			primeiromaior = numeros[cont];
		}else if ((numeros[cont] > segundomaior) && (numeros[cont]< primeiromaior)) {
			segundomaior = numeros[cont];
		}
	}

	System.out.println("O maior é " + primeiromaior);
	System.out.println("O segundo maior é " + segundomaior);[/code]

Considerando que os valores estão armazenados em um vetor podes resolver na mão dessa maneira:

int[] valores = new int[10]
//insere os valores aqui
int maior = 0;
int segundoMaior = 0;
for(int i = 0; i < 10; i++) {
   if(valores[i] > maior) {
      segundoMaior = maior;
      maior = valores[i];
   } else if(valores[i] > segundoMaior) {
      segundoMaior = valores[i];
   }
}

System.out.println("Maior: " + maior);
System.out.println("Segundo maior: " + segundoMaior);

Ou simplesmente usar a API do java e fazer:

valores = new int[10] //insere os valores aqui Arrays.sort(valores); System.out.println("Maior: " + valores[9]); System.out.println("Segundo maior: " + valores[8]);