Eingabe und Sortierung von drei ganzen Zahlen

75062
user2522055

Das Problem der Frage ist:

Schreiben Sie ein Programm, das 3 Ganzzahlen als Eingabe vom Benutzer akzeptiert, indem Sie Eingabedialognachrichten verwenden und die drei Zahlen sortieren.

Ich möchte nur wissen: Gibt es größere Unterschiede zwischen meinem Code und dem Code des Buches in Bezug auf die Effizienz oder irgendetwas, das ich mit meinem Code besser hätte machen können? Ich lerne langsam Java und versuche, die besten Techniken zu erlernen, während ich diese Sprache lerne. Ich verstehe auch nicht wirklich die Logik hinter der Antwort des Buches. Es scheint, als würden sie nur zwei Zahlen vergleichen, aber wie können sie erraten, welche dritte Zahl in der Sorte sein wird?

Hinweis: Ich folge meinem Lehrbuch und das Neueste, was wir gelernt haben, sind if und else-Anweisungen zusammen mit switch-Anweisungen. Ich habe kein Looping gelernt und bin immer noch in den Grundlagen. Ich folge Daniel Liang, Einführung in die Java-Programmierung, 9. Ausgabe, und dies ist aus den Übungen in Kapitel 3.

Meine Lösung:

package Chapter3Exercises;
import javax.swing.JOptionPane;

public class SortThreeIntegers 
{
    public static void main(String[] args) 
    {
        //Prompt user to enter three integers

        String stringNum1 = JOptionPane.showInputDialog(null, "Please enter 1st Integer: ");
        String stringNum2 = JOptionPane.showInputDialog(null, "Please enter 2nd Integer: ");
        String stringNum3 = JOptionPane.showInputDialog(null, "Please enter 3rd Integer: ");

        int num1 = Integer.parseInt(stringNum1);
        int num2 = Integer.parseInt(stringNum2);
        int num3 = Integer.parseInt(stringNum3);

        if ((num1 > num2 && num1 > num3))
        {
            if(num2 > num3)
            {
                System.out.print(num3 + " " + num2 + " " + num1);
            }
            else
                System.out.print(num2 + " " + num3 + " " + num1);
        }
        else if ((num2 > num1 && num2 > num3))
        {
            if(num1 > num3)
            {
                System.out.print(num3 + " " + num1 + " " + num1);
            }
            else
                {
                System.out.print(num1 + " " + num3 + " " + num2);
                }
        }
        else if ((num3 > num1 && num3 > num2))
        {
            if(num1 > num2)
            {
                System.out.print(num2 + " " + num1 + " " + num3);
            }
            else
                System.out.print(num1 + " " + num2 + " " + num3);
        }
        else
        {
            System.out.println("ERROR!");
        }

    }

}

Lösung des Buches:

public class Exercise03_08 {
  public static void main(String[] args) {
    java.util.Scanner input = new java.util.Scanner(System.in);

    // Enter three numbers
    System.out.print("Enter three integers: ");
    int number1 = input.nextInt();
    int number2 = input.nextInt();
    int number3 = input.nextInt();

    if (number1 > number2) {
      int temp = number1;
      number1 = number2;
      number2 = temp;
    }

    if (number2 > number3) {
      int temp = number2;
      number2 = number3;
      number3 = temp;
    }

    if (number1 > number2) {
      int temp = number1;
      number1 = number2;
      number2 = temp;
    }

    System.out.println("The sorted numbers are "
      + number1 + " " + number2 + " " + number3);
  }
}
Antworten
5
Beachten Sie, dass dies keine wirkliche Weltlösung ist. Der einfachste Weg, dieses Problem zu lösen, besteht darin, die 3 Zahlen auf eine Liste zu setzen Rufen Sie dann Collections.sort (meineListe) auf. kiwiron vor 5 Jahren 0

2 Antworten auf die Frage

4
Mitchell Lee

The books solution, is definitely cleaner, and the biggest difference I can see is the books solution is actually sorting the variables, rather than just changing the display order.

In terms of efficiency, displaying stuff to the console is more efficient than popping up message boxes. There's less conditional logic in the books solution and a lot less code duplication. Other than that, there is very little difference in the sorting operation, the books maybe slightly more efficient due to less conditional checks.

Overall though, in my opinion the book provides the better solution, because it has virtually no duplicated code, conditionals are a single level deep (much easier to read), actually sorts the numbers in memory (if this program were to do more, your variables would already be sorted for you next time you need them, as opposed to having to duplicate the conditional logic, and overall it's much easier to understand what it's doing and what's going on.

1
200_success

Why should there be an error case for sorting three integers? There shouldn't be any good reason for failure. Your code reports an error, for example, if all three inputs are the same. The book's code handles it just fine.