Problem in the algorithm

0
  

Statement: Read 3 integer values and sort them in ascending order. At the end, show the values in ascending order, a blank line and then the values in the sequence as read.

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

    System.out.println("Digite 3 valores em sequencia:");
    int v1 = x.nextInt();
    int v2 = x.nextInt();
    int v3 = x.nextInt();

    int um = 0;
    int dois = 0;
    int tres = 0;

    if(v1 < v2 && v1 <v3){
        um = v1;
    }if(v2 < v3){
        dois = v2;
        tres = v3;
    }else{
        tres = v2;
        dois = v3;
    }
    if(v2 < v1 && v2 < v3){
        um = v2;
    }if(v1 < v3){
        dois = v1;
        tres = v3;
    }else{
        dois = v3;
        tres = v1;
    }
    if(v3 < v2 && v3 < v1){
        um = v3;
    }if(v2 < v1){
        dois = v2;
        tres = v1;
    }else{
        dois = v1;
        tres = v2;
    }
    System.out.println("");
    System.out.println(um);
    System.out.println(dois);
    System.out.println(tres);
    System.out.println("");
    System.out.println(v1);
    System.out.println(v2);
    System.out.println(v3);


}

}

My problem is this, when the user writes the numbers from highest to lowest (6,5,4) or from smallest to highest (4,5,6) the algorithm works correctly, but when the user puts out of order, eg 6,4,5 goes wrong. Another question is whether the algorithm could be done in a more concise way.

    
asked by anonymous 09.06.2017 / 00:10

2 answers

2
import java.util.Scanner;

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

        System.out.println("Digite 3 valores em sequencia:");
        int a = x.nextInt();
        int b = x.nextInt();
        int c = x.nextInt();
        int v1 = a, v2 = b, v3 = c;

        // Se v1 for maior que v2, troca eles de lugar.
        if (v1 > v2) {
            int aux = v2;
            v2 = v1;
            v1 = aux;
        }

        // Se v1 for maior que v3, troca eles de lugar.
        if (v1 > v3) {
            int aux = v3;
            v3 = v1;
            v1 = aux;
        }

        // Se v2 for maior que v3, troca eles de lugar.
        if (v2 > v3) {
            int aux = v3;
            v3 = v2;
            v2 = aux;
        }

        System.out.println(v1 + ", " + v2 + ", " + v3);
        System.out.println();
        System.out.println(a + ", " + b + ", " + c);
    }
}

See here working on ideone.

The idea is to make v1 the smallest value. For this it compares with v2 and v3 , changing if v1 is not the smallest. So, after these two steps, v1 will be the smallest number.

Next, v2 must be the middle number and v3 the largest. So just compare them and swap them if you do not.

Note that you do not need to show each value separately from the others each in its System.out.println . You can combine an entire row in each System.out.println .

    
09.06.2017 / 01:00
0

resolution:

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

    System.out.println("Digite 3 valores em sequencia:");
    int v1 = x.nextInt();
    int v2 = x.nextInt();
    int v3 = x.nextInt();

    int um = 0;
    int dois = 0;
    int tres = 0;

    if(v1 < v2 && v1 <v3){
        um = v1;
    if(v2 < v3){
        dois = v2;
        tres = v3;
    }else{
        dois = v3;
        tres = v2;
    }
    }
    if(v2 < v1 && v2 < v3){
        um = v2;
    if(v1 < v3){
        dois = v1;
        tres = v3;
    }else{
        dois = v3;
        tres = v1;
    }
    }
    if(v3 < v2 && v1 > v3){
        um = v3;
    if(v2 < v1){
        dois = v2;
        tres = v1;
    }else{
        dois = v1;
        tres = v2;
    }
    }
    System.out.println("");
    System.out.println(um);
    System.out.println(dois);
    System.out.println(tres);
    System.out.println("");
    System.out.println(v1);
    System.out.println(v2);
    System.out.println(v3);


}

}

My mistake was to have closed the key very early in this part:

if(v1 < v2 && v1 <v3){
    um = v1;
}if(v2 < v3){
    dois = v2;
    tres = v3;

I closed shortly before the second if, when I should have left it open

if(v1 < v2 && v1 <v3){
    um = v1;
if(v2 < v3){
    dois = v2;
    tres = v3;
    
09.06.2017 / 00:31