Сортировка 3 номеров от наименьшего к величайшему - PullRequest
0 голосов
/ 04 сентября 2018

В рамках набора задач я должен отсортировать 3 числа в порядке возрастания. Задача достаточно простая, но по некоторым причинам я не получаю ожидаемого результата. Использование массивов не допускается. Ниже мой код; Я связался с моей блок-схемой здесь . Я не могу заставить программу сортировать 3 числа, такие как 5, 5 и -4. Когда я пытаюсь в этом случае, вот вывод:

Enter three numbers.

В заказе -0,04 5,0 5,0 В заказе 5,0 -0,04 5,0

Если я заставлю это работать, я не смогу разобрать случай 23, 0, 39. Не уверен, что я слишком усложнил попытку с таким количеством случаев; Я чувствую, что моя блок-схема охватывает все возможности. Заранее спасибо!

  import java.util.Scanner; 

class Main {
  public static void main(String[] args) {

    Scanner reader = new Scanner(System.in); 
    System.out.print("Enter three numbers.");

    double x = reader.nextDouble();
    double y = reader.nextDouble(); 
    double z = reader.nextDouble();

    if (x >= y){
            if (y >= z)
                System.out.print("In order " + z + " "+ y + " " + x);

            if  (z >= x)
                System.out.print("In order " + y + " "+ x + " " + z);

            if (x > z)
                System.out.print("In order " + y + " " + z + " " + x);
    }

    if (y > x)
    {
            if (z >= y)
                System.out.print("In order " + x + " " + y + " "+ z);
        if (z >= x)
            System.out.print("In order " + y + " " + x + " " + z);
        if (x > z)
            System.out.print("In order " + y + " " + z + " " + x);
    }


  }
}

Ответы [ 3 ]

0 голосов
/ 04 сентября 2018

Если вы хотите придерживаться логики if / else, вот небольшая модификация вашего исходного решения. Обратите внимание на использование else if. Я закомментировал ваши предыдущие строки кода для сравнения.

import java.util.Scanner; 

class Main {
  public static void main(String[] args) {

    Scanner reader = new Scanner(System.in); 
    System.out.println("Enter three numbers.");  //Use println instead of print, that way the input begins on the next line

    double x = reader.nextDouble();
    double y = reader.nextDouble(); 
    double z = reader.nextDouble();

    if (x >= y){ //In the three responses below, y is always before x.  
            if (y >= z)
                System.out.print("In order " + z + " "+ y + " " + x);

            else if  (z >= x)
                System.out.print("In order " + y + " "+ x + " " + z);

            else if (x > z)
                System.out.print("In order " + y + " " + z + " " + x);
    }

    if (y > x){// In the three responses below, x is always before y
        if (z >= y)
            System.out.print("In order " + x + " " + y + " "+ z);
        else if (z >= x)
            //System.out.print("In order " + y + " " + x + " " + z); //In this case, z has to be smaller than y.  The order was off
            System.out.print("In order " + x + " " + z + " " + y);
        else if (x > z)
            //System.out.print("In order " + y + " " + z + " " + x);
            System.out.print("In order " + z + " " + x + " " + y); //Y is the biggest.  The order here was off.  
    }

  }
}
0 голосов
/ 04 сентября 2018

Есть некоторые проблемы с вашими if/else утверждениями:

  1. Используйте else if операторов, поскольку любое из условий будет выполнено, а не все, и, следовательно, результат будет напечатан несколько раз.
  2. Второй оператор if последние два оператора неверны, потому что если мы введем этот оператор if, то (x < y) точно, но вы печатаете x до y (теперь отредактировано).

Вот правильный код:

if (x >= y) {
    if (y >= z)
        System.out.print("In order " + z + " " + y + " " + x);
    else if (z >= x)
        System.out.print("In order " + y + " " + x + " " + z);
    else if (x >= z)
        System.out.print("In order " + y + " " + z + " " + x);
} else {
    if (z >= y)
        System.out.print("In order " + x + " " + y + " " + z);
    else if (z >= x)
        System.out.print("In order " + x + " " + z + " " + y);
    else if (x >= z)
        System.out.print("In order " + z + " " + x + " " + y);
}
0 голосов
/ 04 сентября 2018

Вы можете решить эту проблему без if (s), используя Math.max(double, double) и Math.min(double, double) и базовое сложение и вычитание. Как,

double max = Math.max(x, Math.max(y, z));
double min = Math.min(x, Math.min(y, z));
double mid = x + y + z - max - min;
System.out.printf("In order %f %f %f%n", min, mid, max);

Использование сравнений if и else вместо Math.max и Math.min немного сложнее. Выберите значение по умолчанию и сравните с двумя другими. Как,

double max = z;
if (x > max || y > max) {
    if (x > y) {
        max = x;
    } else {
        max = y;
    }
}
double min = z;
if (x < min || y < min) {
    if (x < y) {
        min = x;
    } else {
        min = y;
    }
}

double mid = x + y + z - max - min;
System.out.printf("In order %f %f %f%n", min, mid, max);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...