Ajuda com While, if e logica

Ola pessoal, boa tarde a todos, estou estudando pelo site Java Progressivo, eu não sabia nada sobre java e nem sobre programar, mas tenho um sonho de um dia poder criar um jogo , então comecei estudar uma linguagem de programação, escolhi java por ser uma linguagem multiplataforma e para poder aprender a programar para dispositivos androids depois, criar meus próprios apps.

Só que no meio do meu percurso, me deparei com um exercício proposto pelo site Java Progressivo que esta me deprimindo, me mostrando as primeiras dificuldades em não ser tão bom em logica e tentar programar.

O exercício pede:
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.

Não estou conseguindo fazer, tem que usar while,if e logica pra encaixar direito eles. Se alguém souber como posso fazer isso, ficaria enormemente grato. Obrigado.

Comecei fazer, ja tentei vários jeitos mas nenhum deu certo até agora.

[code]import java.util.Scanner;

public class DOIS_MAIORES {
public static void main (String [] args){
float num,maior,maior2;
int Count=2;

    Scanner entrada = new Scanner (System.in);
    System.out.println ("Digite o 1° numero:");
    num=entrada.nextFloat ();
    maior=num;
    maior2=num;
  
    
    while (Count<=10){
    System.out.println("Digite o"+Count+"° Numero");
    num=entrada.nextFloat();
   //essa é a parte que estou com dificuldade...não consigo encontrar a logica para que faça o que eu quero.
    if (num>maior){
        maior=num;
               
     if ((num>maior2)&&(num<maior)){
        maior2=num;
        }}
    Count++;
    }
    
    
    
    System.out.println("Maiores:"+maior +" e "+ maior2);
    }

}

    [/code]

[quote=nininho2000]Ola pessoal, boa tarde a todos, estou estudando pelo site Java Progressivo, eu não sabia nada sobre java e nem sobre programar, mas tenho um sonho de um dia poder criar um jogo , então comecei estudar uma linguagem de programação, escolhi java por ser uma linguagem multiplataforma e para poder aprender a programar para dispositivos androids depois, criar meus próprios apps.

Só que no meio do meu percurso, me deparei com um exercício proposto pelo site Java Progressivo que esta me deprimindo, me mostrando as primeiras dificuldades em não ser tão bom em logica e tentar programar.

O exercício pede:
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.

Não estou conseguindo fazer, tem que usar while,if e logica pra encaixar direito eles. Se alguém souber como posso fazer isso, ficaria enormemente grato. Obrigado.

Comecei fazer, ja tentei vários jeitos mas nenhum deu certo até agora.

[code]import java.util.Scanner;

public class DOIS_MAIORES {
public static void main (String [] args){
float num,maior,maior2;
int Count=2;

    Scanner entrada = new Scanner (System.in);
    System.out.println ("Digite o 1° numero:");
    num=entrada.nextFloat ();
    maior=num;
    maior2=num;
  
    
    while (Count<=10){
    System.out.println("Digite o"+Count+"° Numero");
    num=entrada.nextFloat();
   //essa é a parte que estou com dificuldade...não consigo encontrar a logica para que faça o que eu quero.
    if (num>maior){
        maior=num;
               
     if ((num>maior2)&&(num<maior)){
        maior2=num;
        }}
    Count++;
    }
    
    
    
    System.out.println("Maiores:"+maior +" e "+ maior2);
    }

}

    [/code][/quote]

Bem na parte da comparação, você deveria colocar 2 if separados, aqui no que você nos mostrou está um if dentro de outro, ou seja ele está perguntando que o valor digitado é o maior, e depois joga ele na variavel maior, depois disso você pergunta se o mesmo valor que você jogou na variavel maior é menor que ela, ou seja você está perguntando se ela é maior que ela mesma.

E também não jogue o valor que você pegou com a primeira leitura para as variaveis de maior e maior2
como variaveis primitivas não permitem colocar valores nulos você e você pode usar o Float com letra maiuscula e fazer a seguinte sintaxe:

[code]Float maior=null, maior2=null;
cont=0;

while(cont<10){
//pega valor e joga na variavel

//Verifica se o valor de maior for nulo se for isso quer dizer que nenhum valor foi atribuido a ele
if(maior==null){
//Atribui um valor a maior, que no caso seria o primeiro digitado
maior=digitado;
}else{
//Se já houver um valor atribuido a maior ele verifica se é maior que o valor digitado
if(digitado>maior){
maior=digitado;
}else{
//Se não for ele verifica se algum valor foi atribuido à maior2 se não foi atribuido ele joga o valor digitado caso contrario ele verifica se o valor digitado é maior.
if(maior2==null){
maior2=digitado;
}else if(digitado>maior2){
maior2=digitado;
}
}
}

cont++;
}[/code]

PS, eu não teste o código pode haver alguns erros eu fiz ele de cabeça mesmo.

.

Cara, minha versão pra resolução do problema é a seguinte:

import java.util.Scanner;

public class Treta {
	public static void main(String[] args) {
		Scanner entrada = new Scanner(System.in);
		float numeroInformado, maior, segundoMaior;
		int contador=2;
		
		System.out.print("Informe o 1o valor: ");
		numeroInformado = entrada.nextFloat();
		maior=numeroInformado;
		segundoMaior=numeroInformado;
		
		while(contador<=10) {
			System.out.printf("Informe o %do valor: ", contador);
			numeroInformado = entrada.nextFloat();
			if(numeroInformado>maior)
				maior=numeroInformado;
			if(numeroInformado>segundoMaior && numeroInformado!=maior)
				segundoMaior=numeroInformado;
			contador++;
		}
		
		System.out.printf("\nMaior valor: %f\nSegundo maior valor: %f", maior, segundoMaior);
		
	}
}

Achei por bem deixar a primeira atribuição fora do while… Me parece má ideia fazer um esquema dentro do while só pra descobrir se é ou não a primeira vez que o usuário digita um número, até porque isso vai ser útil em 1 vez (e inútil nas outras 9) :D:D:D

É um algoritmo simples e pequeno, mas abre espaço para diversas implementações. É legal pra treinar.

Se teu problema for a lógica, procure observar e abstrair o fluxo de informações que acontecerá no teu programa. Pense numa solução e só depois comece a escrever o código (lápis e papel podem te ajudar a organizar as ideias!).
Também é importante conhecer as ferramentas disponíveis, assim tu poderá se concentrar totalmente na lógica. Conheça bem a linguagem que tu está usando, saiba dos recursos disponíveis que podem vir a te ajudar etc.

[quote=tomorrowdoesntmakesense]Cara, minha versão pra resolução do problema é a seguinte:

import java.util.Scanner;

public class Treta {
	public static void main(String[] args) {
		Scanner entrada = new Scanner(System.in);
		float numeroInformado, maior, segundoMaior;
		int contador=2;
		
		System.out.print("Informe o 1o valor: ");
		numeroInformado = entrada.nextFloat();
		maior=numeroInformado;
		segundoMaior=numeroInformado;
		
		while(contador<=10) {
			System.out.printf("Informe o %do valor: ", contador);
			numeroInformado = entrada.nextFloat();
			if(numeroInformado>maior)
				maior=numeroInformado;
			if(numeroInformado>segundoMaior && numeroInformado!=maior)
				segundoMaior=numeroInformado;
			contador++;
		}
		
		System.out.printf("\nMaior valor: %f\nSegundo maior valor: %f", maior, segundoMaior);
		
	}
}

Achei por bem deixar a primeira atribuição fora do while… Me parece má ideia fazer um esquema dentro do while só pra descobrir se é ou não a primeira vez que o usuário digita um número, até porque isso vai ser útil em 1 vez (e inútil nas outras 9) :D:D:D

É um algoritmo simples e pequeno, mas abre espaço para diversas implementações. É legal pra treinar.

Se teu problema for a lógica, procure observar e abstrair o fluxo de informações que acontecerá no teu programa. Pense numa solução e só depois comece a escrever o código (lápis e papel podem te ajudar a organizar as ideias!).
Também é importante conhecer as ferramentas disponíveis, assim tu poderá se concentrar totalmente na lógica. Conheça bem a linguagem que tu está usando, saiba dos recursos disponíveis que podem vir a te ajudar etc.[/quote]

Reveja a sua Solução pois ela falha, dois resultados de teste:

Informe o 1o valor: -89
Informe o 2o valor: 4
Informe o 3o valor: -11
Informe o 4o valor: 4
Informe o 5o valor: 3
Informe o 6o valor: 2
Informe o 7o valor: 3
Informe o 8o valor: 4
Informe o 9o valor: 5
Informe o 10o valor: 6

Maior valor: 6,000000
Segundo maior valor: 3,000000

Informe o 1o valor: -99
Informe o 2o valor: -78
Informe o 3o valor: -66
Informe o 4o valor: -23
Informe o 5o valor: -45
Informe o 6o valor: -77
Informe o 7o valor: -11
Informe o 8o valor: -78
Informe o 9o valor: -3
Informe o 10o valor: -20

Maior valor: -3,000000
Segundo maior valor: -20,000000

até… :slight_smile: