java 按升序显示三个非负整数

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/4918499/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-10-30 08:37:30  来源:igfitidea点击:

Display three non-negative integers in increasing order

javaif-statement

提问by user605989

Prompt the user to type in three non-negative integers. Display the integers in an increasing order.

提示用户输入三个非负整数。按递增顺序显示整数。

import java.util.Scanner;

{
    int number1,number2,number3;
         Scanner keyboard = new Scanner (System.in);
         number1=keyboard.nextInt();
         number2=keyboard.nextInt();
         number3=keyboard.nextInt();

        if(number1<number2&&number1<number3&&number2<number3)
        {
            System.out.println(number1);
            System.out.println(number2);
            System.out.println(number3);
        }

        else if(number1>number2&&number1>number3&&number2>number3)
        {
            System.out.println(number3);
            System.out.println(number2);
            System.out.println(number1);
        }

        else if(number1<number2&&number1<number3&&number2>number3)
        {
            System.out.println(number1);
            System.out.println(number3);
            System.out.println(number2);
        }

        else if(number2>number1&&number2>number3&&number1>number3)
        {
            System.out.println(number3);
            System.out.println(number1);
            System.out.println(number2);
        }

        else if (number3>number1&&number3>2&&number1>number2)
        {
            System.out.println(number2);
            System.out.println(number1);
            System.out.println(number3);
        }

Output:

输出:

2 1 3

2 1 3

1 2 3

1 2 3

P.S. I am not allowed to use while statement, swing and for. I am newbie at java so this what I could come up with. Is there a faster way? Thank you.

PS 我不允许使用 while 语句、swing 和 for。我是java的新手,所以我可以想出这个。有没有更快的方法?谢谢你。

回答by WuHoUnited

This is an implementation of bubble sort. It is not much better than your implementation but gives a glimpse into how you would use a loop in the future. What happens is that after the first 2 blocks, the largest value will be in the third spot. The next block then fixes the remaining two numbers. You could move the if clauses into a separate function that accepts as parameters the two numbers you want to compare and switch.

这是冒泡排序的一个实现。它并不比您的实现好多少,但可以让您一瞥将来如何使用循环。发生的情况是,在前 2 个区块之后,最大值将出现在第三个位置。下一个块然后修复剩余的两个数字。您可以将 if 子句移动到一个单独的函数中,该函数接受要比较和切换的两个数字作为参数。

public static void main(String[] args) {


 int number1,number2,number3;
 Scanner keyboard = new Scanner (System.in);
 number1=keyboard.nextInt();
 number2=keyboard.nextInt();
 number3=keyboard.nextInt();

 int temp;

 if (number2 < number1){
     temp = number2;
     number2 = number1;
     number1 = temp;
 }

 if (number3 < number2){
     temp = number3;
     number3 = number2;
     number2 = temp;
 }

 if (number2 < number1){
     temp = number2;
     number2 = number1;
     number1 = temp;
 }
  System.out.println(number1);
  System.out.println(number2);
  System.out.println(number3);

}

回答by btilly

Speed is not an issue. Correctness is. What happens if number1 and number3 are equal? That said, here is a more compact piece of logic that should be fairly efficient.

速度不是问题。正确性是。如果 number1 和 number3 相等会发生什么?也就是说,这是一个更紧凑的逻辑,应该相当有效。

if (number2 < number1)
{
    temp_number = number1;
    number1 = number2;
    number2 = temp_number;
}

if (number3 < number2)
{
    temp_number = number2;
    number2 = number3;
    number3 = temp_number;

    if (number2 < number1)
    {
        temp_number = number1;
        number1 = number2;
        number2 = temp_number;
    }
}

System.out.println(number1);
System.out.println(number2);
System.out.println(number3);

回答by Costis Aivalis

Since it is homework, i think a nested ifwith it's else's would be a cleaner solution. It works also correctly with equal values, negative values and does not swap the values of the variables. :-)

由于它是家庭作业,我认为嵌套 ifelse将是一个更清洁的解决方案。它也适用于相等的值、负值,并且不会交换变量的值。:-)

    int number1, number2, number3;
    Scanner keyboard = new Scanner(System.in);

    number1 = keyboard.nextInt();
    number2 = keyboard.nextInt();
    number3 = keyboard.nextInt();

    if (number1 < number2) {
        if (number2 < number3) {
            System.out.println("123 " + number1 + number2 + number3);
        } else {
            if (number1 < number3)
                System.out.println("132 " + number1 + number3 + number2);
            else
                System.out.println("231 " + number3 + number1 + number2);
        }
    } else {
        if (number3 < number2) {
            System.out.println("321 " + number3 + number2 + number1);
        } else {
            if (number3 < number1)
                System.out.println("312 " + number2 + number3 + number1);
            else
                System.out.println("213 " + number2 + number1 + number3);
        }
    }

回答by abson

boolean n2 ;   
if(num1>num2) {
    if(num1>num2 && num1>num3){
        if(num2>num3){
            System.out.println(num1+">"+num2+">"+num3);
            n2=true;
        }
        else {
            System.out.println(num1+">"+num3+">"+num2);
        }
    }
    else if(n2){
        if(num1<num3){
            System.out.println(num2+">"+num3+">"+num1);
        }
    }
}
else {
    System.out.println(num2+">"+num1+">"+num3);
}

回答by maerics

Your way is fast enough for three numbers but what happens if the next assignment requires you to do the same task on a list of 10 integers? Or 100? Or 1,000,000?

您的方法对于三个数字来说足够快,但是如果下一个任务要求您对 10 个整数的列表执行相同的任务,会发生什么?还是100?还是一百万?

As you continue learning to program you will learn that the performance of the strategy you choose to solve a problem (the algorithm) can vary immensely depending on the size of the input. The strategy you chose in your attempt of this problem was to enumerate all the ways that three numbers can relate by size - not too bad since there are only six - but for even ten numbers there are millions of ways! A better choice of algorithm would be to store them in a structure where their size increases from item to item (by sorting them) since most sorting algorithms will still perform well with very large input sets.

随着您继续学习编程,您将了解到您选择解决问题的策略(算法)的性能可能会因输入的大小而有很大差异。您在尝试解决此问题时选择的策略是枚举三个数字可以按大小关联的所有方式 - 不算太糟糕,因为只有六个 - 但即使是十个数字也有数百万种方式!更好的算法选择是将它们存储在一个结构中,其中它们的大小从项目到项目增加(通过对它们进行排序),因为大多数排序算法在非常大的输入集上仍然表现良好。