Como continuar esse código simples

21 respostas
Legreyte

Bom pessoal, estava olhando esse código na internet e gostaria de fazer ele com 5 números. Como ficaria a continuação dos if's ?

import javax.swing.*;
 
public class ordenador {
    public static void main(String[] args)
{
 
	
    String x, y, z;
    int a, b, c, d; 
          
         // Recebendo os 3 números
	 x = JOptionPane.showInputDialog( "Digite um valor numérico:");
	 y = JOptionPane.showInputDialog( "Digite um valor numérico:");
	 z = JOptionPane.showInputDialog( "Digite um valor numérico:");
 
	 a = Integer.parseInt(x); b = Integer.parseInt(y); c = Integer.parseInt(z); // passando os valores de String para inteiro
 
	    if(a > b)
            {
                d = a;
                a = b;
                b = d;
            }
            if(a > c)
           {
                d  = a;
                a = c;
                c = d;
           }
           if(b > c)
           {
                d = b;
                b = c;
                c = d;
           }
 
        System.out.println(a + "," + b +"," + c); // Resultado do maior para o menor
    }
}

21 Respostas

JhowTroMundo

Pense em como fazer isso pra qualquer quantidade de números.

Legreyte

Valeu por responder cara, mas aí que está o problema. Não entendi a lógica utilizada nos if’s. Se eu já estivesse entendido continuaria a fazer. É por questão de curiosidade, gostaria de faze-lo com pelo menos 5 números. Alguém entendeu essa lógica nos if’s ?

Obrigado desde já!

otaviojava

Uma boa seria refatorar o nome das variável para algo que faça sentido.
Por exemplo:

int a=b-c;

Refatoraria para:

int saldo=valorDisponivel-pagamentoEfetuado;

Assim vc consegue melhor o que esse código está fazendo.

Legreyte

Fala aew Otavio, tu não respondeu em lugar errado não ?! não tem nada disso nesse código.

Obrigado!

otaviojava

Legreyte:
Fala aew Otavio, tu não respondeu em lugar errado não ?! não tem nada disso nesse código.

Obrigado!


Não.
Esse código foi dado somente como exemplo, o fato é que com variáveis com nome falando o que elas realmente são ficam bem mais fácil de entender em relação aos “int ai ou int b”.

otaviojava

Tenta fazer isso e veja se fica mais claro.
Caso mesmo assim vc não consiga, basta enviar um post falando que não conseguiu.

Legreyte

otaviojava:
Legreyte:
Fala aew Otavio, tu não respondeu em lugar errado não ?! não tem nada disso nesse código.

Obrigado!


Não.
Esse código foi dado somente como exemplo, o fato é que com variáveis com nome falando o que elas realmente são ficam bem mais fácil de entender em relação aos “int ai ou int b”.

Entendi, mas eu só estou querendo aprender a lógica usada nesse if, ela dá um resultado no final com os números organizados do maior para o menor. Você entendeu essa lógica ? sabe como seria a continuação dele, como por exemplo se tivesse 5 ou mais números?

Obrigado!

otaviojava

Dei uma refatorada. Dá uma olhada.
Veja se é realmente isso que vc quer.
Uma coisa que vc terá que modificar é que o código realizando a ordem crescente.
Espero que tenha te ajudado.

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import javax.swing.JOptionPane;

public class Teste {
	   public static void main(String[] args)  
	   {  
	     
	         
	       List<Integer> numeros=new ArrayList<Integer>();
	            // Recebendo os 3 números  
	       for(int indice=0;indice<3;indice++){
	    	   String x = JOptionPane.showInputDialog( "Digite um valor numérico:"); 
	    	   numeros.add(Integer.parseInt(x)); 
	       }
	     
	     
	        Collections.sort(numeros);
	        for(Integer numero:numeros){
	        	System.out.println(numero); // Resultado do menor para o maior	
	        	
	        }
	             
	       }  
}
Legreyte

Utilizei do que você falou com as variáveis sendo notas, ficou assim:

import javax.swing.*;

public class NewClass 
{
     public static void main(String[] args)
     {
     
	 int nota1, nota2, nota3, notaQualquer;
 
 
	 nota1 = Integer.parseInt(JOptionPane.showInputDialog("Digite um valor numérico:"));
	 nota2 = Integer.parseInt(JOptionPane.showInputDialog("Digite um valor numérico:"));
	 nota3 = Integer.parseInt(JOptionPane.showInputDialog("Digite um valor numérico:"));
 
 
	    if(nota1 < nota2){
                notaQualquer = nota1;
                nota1= nota2 ;
                nota2 = notaQualquer;
        		   }
        if(nota1 < nota3){
                notaQualquer  = nota1;
                nota1= nota3;
                nota3 = notaQualquer;
        			  }
        if(nota2< nota3){
                notaQualquer= nota2 ;
                nota2 = nota3;
                nota3= notaQualquer;
        			  }
 
        System.out.println(nota1 + "," + nota2 +"," + nota3);
     }
}
otaviojava

Ficou melhor.
Dá uma olhada no código que eu fiz acima.
E veja o que vc acha.

Legreyte

Obrigado por responder Otávio. Mas velho você utilizou ArrayList, eu gostaria de entender com o uso dos if’s.

otaviojava

Acho que isso é mais ou menos o que vc quer:
dá uma olhada:

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

import javax.swing.JOptionPane;

public class Teste {
	   public static void main(String[] args)  
	   {  
	     
	         
	       List<Integer> numeros=new ArrayList<Integer>();
	            // Recebendo os 3 números  
	       for(int indice=0;indice<3;indice++){
	    	   numeros.add(Integer.parseInt(JOptionPane.showInputDialog( "Digite um valor numérico:"))); 
	       }
	     
	     
	        Collections.sort(numeros, new Comparator<Integer>() {

				@Override
				public int compare(Integer numero1, Integer numero2) {
				
					return numero2.compareTo(numero1);
				}
	        	
			});
	        for(Integer numero:numeros){
	        	System.out.println(numero); // Resultado do maior para o menor	
	        	
	        }
	             
	       }  
}
otaviojava

Vc se refere ao conceito ?
Se for o caso dá uma olhada em: http://www.arquivodecodigos.net/dicas/java-as-instrucoes-if-e-if-else-do-java-1232.html
Ele só entra no bloco se a condição for verdadeira.

if(nota1 < nota2){ 
//ação
}

Nesse código ele só entraria se nota1 for menor que nota2 e executaria a ação dentro do bloco.

Legreyte

Otavio, te agradeço novamente. O que tu fez realmente traz o mesmo resultado e até de forma melhor. Só que gostaria mesmo de fazer a continuação naquele ‘if’.

Por exemplo, se existisse as variáveis

int nota4, nota5;

além das três já existentes.

Estou matutando para entender como deu certo os números ficarem ordenados sendo usados dessa forma. Quero saber a continuação com mais ‘if’ entendeu ?

Desculpa te incomodar novamente!

otaviojava

Aparentemente o número de ifs crescerá a mesma medida que crescer o número de variáveis.
Ou seja com nota4 vc provavelmente precisará de mais um, com o nota5 de mais dois if’s e assim sucessivamente.

Legreyte

Otavio obg aí pela paciência. Talvez você não entendeu bem o que queria dizer, eu não sei muito de java, mas estou aprendendo. Estava tentando entender como aquelas igualdades nas condições dos if’s geram o resultado desejado. Vou continuar tentando entender aqui, fazendo outros testes. Falou

S

Cara se vc quiser fazer usando somente lógica, sem nenhum recurso da api, te recomendo armazenar os dados em um array e depois usar
algum algoritmo para ordená-lo(MergeSort por exemplo).Usar os ifs dão um crescimento na quantidade de código tremenda.Note que:

//Se nota1 maior que nota2
if( a > b){

  //se nota2 maior que nota3
  if( b > c ){
   //faça seu processamento
  }

  //se nota2 menor que nota3
  if( b < c){
    //faça seu processamento
  }

   //E se algumas notas forem iguais?O que fazer?
}

Agora imagine isso com 5 notas!
Se você é iniciante em tecnologia é importante entender esses conceitos.
Dá uma olhada nos fontes de java.util.Collections e java.util.Arrays, eles podem te ajudar na solução em arrays.
Espero ter ajudado.Bons estudos.

Legreyte

Obrigado Samuel, vou procurar mais a respeito sim.

Legreyte

:slight_smile:

maquiavelbona
O algoritmo é uma ordenação simples, baseada numa complexidade supralinear. Ex:

2 números: 1 if(a>b)

3 números: 3 if(a>b, a>c, b>c)

4 números: 6 if(a>b, a>c, a>d, b>c, b>d, c>d)

5 números: 10 if(a>b, a>c, a>d, a>e, b>c, b>d, b>e, c>d, c>e, d>e)

6 números:   para prever 15 não?(a>b, a>c, a>d, a>e, a>f, b>c, b>d, b>e, b>f, c>d, c>e, c>f, d>e, d>f, e>f)

Isso é uma combinação (n,2).

maquiavelbona

Especificamente sobre o algoritmo:


E o algoritmo mais simples para implementar a partir desse:

Criado 8 de maio de 2012
Ultima resposta 8 de mai. de 2012
Respostas 21
Participantes 5