Program to read 4 values and show in ascending order

Asked

Viewed 1,373 times

0

Good evening, I started little to hold on programming, I my teacher passed the following question to be made with selection structures If Else in Java:

Build a program to read four values and show them in ascending order.

I then did the following program:

package javaapplication2;
import java.util.Scanner;
public class JavaApplication2 {

    public static void main(String[] args) {
        Scanner teclado=new Scanner(System.in);
        long a,b,c,d;

        System.out.println("Digite um número inteiro:");
        a=teclado.nextLong();
        System.out.println("Digite mais um número inteiro:");
        b=teclado.nextLong();
        System.out.println("Digite outro número inteiro:");
        c=teclado.nextLong();
        System.out.println("Digite o ultimo número inteiro:");
        d=teclado.nextLong();

        if((a<b)&&(b<c)&&(c<d)){
          System.out.println("Os números digitados na ordem crescente são: "+a+b+c+d);
        }else{
            System.out.print("");
        }
        if ((a<b)&&(b<d)&&(d<c)){
          System.out.println("Os números digitados na ordem crescente são: "+a+b+d+c);
        }else{
            System.out.print("");
        }  
        if ((a<c)&&(c<b)&&(b<d)){
          System.out.println("Os números digitados na ordem crescente são: "+a+c+b+d);
        }else{
            System.out.print("");
        }  
        if ((a<c)&&(c<d)&&(d<b)){
          System.out.println("Os números digitados na ordem crescente são: "+a+c+d+b);
        }else{
            System.out.print("");
        }  
        if ((a<d)&&(d<b)&&(b<c)){
          System.out.println("Os números digitados na ordem crescente são: "+a+d+b+c);
        }else{
            System.out.print("");
        }  
        if ((a<d)&&(d<c)&&(c<b)){
          System.out.println("Os números digitados na ordem crescente são: "+a+d+c+b);
        }else{
            System.out.print("");
        }
        if((b<a)&&(a<c)&&(c<d)){
          System.out.println("Os números digitados na ordem crescente são: "+b+a+c+d);
        }else{
            System.out.print("");
        }
        if ((b<a)&&(a<d)&&(d<c)){
          System.out.println("Os números digitados na ordem crescente são: "+b+a+d+c);
        }else{
            System.out.print("");
        }  
        if ((b<c)&&(c<a)&&(a<=d)){
          System.out.println("Os números digitados na ordem crescente são: "+b+c+a+d);
        }else{
            System.out.print("");
        }  
        if ((b<c)&&(c<d)&&(d<a)){
          System.out.println("Os números digitados na ordem crescente são: "+b+c+d+a);
        }else{
            System.out.print("");
        }  
        if ((b<d)&&(d<a)&&(a<c)){
          System.out.println("Os números digitados na ordem crescente são: "+b+d+a+c);
        }else{
            System.out.print("");
        }  
        if ((b<d)&&(d<c)&&(c<a)){
          System.out.println("Os números digitados na ordem crescente são: "+b+d+c+a);
        }else{
            System.out.print("");
        }

But when it comes to this part:

if ((b<c)&&(c<d)&&(d<a)){
          System.out.println("Os números digitados na ordem crescente são: "+b+c+d+a);
        }else{
            System.out.print("");

It stops working, I don’t print anymore ("The numbers typed in ascending order are: "+b+c+d+)My question is if it really is can I use only If Else for this question?

  • 1

    You only print in 12 of the 24 possible cases.

2 answers

2

And I don’t believe that using only if else is the best way to sort numbers. This is because the combination of checks to meet all situations where a set of numbers can be arranged exponentially grows the amount of numbers to be ordered.

To know the amount of checks that must be made just calculate the factorial of the number to be ordered.

In your case are 4 numbers which means you will need 4! combination of ifs be you will have to make 24 comparisons if to cover all the possibilities in which your four numbers may be arranged.

If in your exercise you were asked for 5 numbers you would have to make 120 comparisons. For 6 numbers you would need 720 comparisons.


To solve your problem, and avoid the combinatorial explosion, I used a sorting algorithm. Its name is Bubble Sort and is a simple sort algorithm. The idea is to go through the vector several times, and with each passage to float to the top the largest element of the sequence.

The Bubble Sort algorithm is this one:

faça
    declare :trocado falso
    para cada elemento no vetor até o penúltimo faça
      se os elementos não estão na ordem certa 
         trocar elementos de lugar
         atribua verdadeiro para :trocado
      fim se
    fim para
fim faça se :trocado for falso

If you want more information about Bubble Sort you have on Wikpedia: https://pt.wikipedia.org/wiki/Bubble_sort

If you want to see how people use the Bubble Sort of a searched here on the page: /search?q=bubble+sort

Solution

I switched the variables a,b,c and d by a vector long[] valor, four-position as it will be easier to work with the Bubble Sort.

I have implemented the direct online Bubble Sort in your code. It is contained in the loop do while.

I also imported java.util.Arrays; Only to facilitate vector printing valor at the end of the code.

import java.util.Scanner;
import java.util.Arrays; // Para imprimir os valores no final


public class JavaApplication2 {

    public static void main(String[] args) {
        Scanner teclado=new Scanner(System.in);

        // Troquei as variáveis a,b,c,d por um vetor, pois será mais fácil de trabalhar com o bubble sort

        long[] valor= new long[4]; 

        System.out.println("Digite um número inteiro:");
        valor[0]=teclado.nextLong();
        System.out.println("Digite mais um número inteiro:");
        valor[1]=teclado.nextLong();
        System.out.println("Digite outro número inteiro:");
        valor[2]=teclado.nextLong();
        System.out.println("Digite o ultimo número inteiro:");
        valor[3]=teclado.nextLong();

        teclado.close(); // Libera recursos de System.in

        boolean flag; // Flag será usada para indicar se foi feita uma troca

        do {
            // A cada iteração é marcado como se não houvesse ainda troca
            flag = false; 

            // Percorre por todos os elementos menos o ultimo, 
            //pois serão comparados o elemento com seu seguinte
            for(int i=0; i < valor.length - 1; i++) {

              // verifica se os elementos estão na ordem certa
              if (valor[i] > valor[i + 1]) {

                  // Se não estiverem ordenados os troca de lugar
                  long aux = valor[i]; // Variável para auxiliar para troca dos valores
                  valor[i] = valor[i + 1];
                  valor[i + 1] = aux;

                  flag = true;// Indica que hove uma troca
              }
            }
        } while (flag); // Se hove uma troca o algorítimo continua.

        System.out.println("Os números digitados na ordem crescente são: " + Arrays.toString(valor));

    }
}

-3

I hope it helps you... I did it quickly in PHP. It hasn’t been tested much

$a = 4;
$b = 2;
$c = 8;
$d = 6;

$primeiro = $a;
$segundo = 0;
$terceiro = 0;
$quarto = 0;

// verificando primeiro numero
if ($b < $primeiro) {
    $primeiro = $b;
}elseif($c < $primeiro) {
    $primeiro = $c;
}elseif ($d < $primeiro) {
    $primeiro = $d;
}

// verificando segundo numero
if($a > $primeiro) {
    $segundo = $a;
} else {
    $segundo = $b;
    if($c < $segundo) {
        $segundo = $c;
    }elseif ($d < $segundo) {
        $segundo = $d;
    }
}

// verificando terceiro numero
if($a > $segundo) {
    $terceiro = $a;
} else {
    if($b > $segundo) {
        $terceiro = $b;
    } else {
        $terceiro = $c;
        if($d < $terceiro) {
            $terceiro = $d;
        }
    }
}

// verificando quarto numero
if($a > $terceiro) {
    $quarto = $a;
} else {
    if($b > $terceiro) {
        $quarto = $b;
    } else {
        if($c > $terceiro) {
            $quarto = $c;
        } else {
            $quarto = $d;
        }
    }
}


echo $primeiro .' - '. $segundo .' - '. $terceiro .' - '. $quarto;
  • 4

    The question is about Java.

  • for those who really know how to program the language is irrelevant ... just as I did in PHP could have run in any other language.

  • 2

    Is in question: "... I started little to hold on programming, i my teacher passed the following question to be made with If Else selection structures in Java..." . Read How to write a good answer, any doubt make our [Tour]

Browser other questions tagged

You are not signed in. Login or sign up in order to post.