if else排序程序没有正确排序

时间:2015-10-12 22:16:51

标签: java sorting if-statement

我在使用简单的排序程序时遇到了麻烦。该程序旨在从用户获取3个整数,并从最小到最大正确排序。如果它是最大的,它可以正常工作,但如果不是,它将无法工作。

代码:

int a = 0;
int b = 0;
int c = 0;
int a1 = 0;
int b1 = 0;
int c1 = 0;


System.out.print("Please enter the first interger:");
a = keyboard.nextInt();
System.out.print("Please enter the second interger:");
b = keyboard.nextInt();
System.out.print("Please enter the third interger:");
c = keyboard.nextInt();

if(a > b || a > c){
    c1 = a;

    if(b < c){
        a1 = b;
        b1 = c; 
    }
    else if(b > c){
        b1 = b;
        a1 = c;     
    }
}       
else if((a < b || a > c) && (a < c || a > b)){
    b1 = a;

    if(c > b){
        a1 = b;
        c1 = c;
    }
    else if(b > c){
        a1 = c;
        c1 = b;
    }
}
else if(a < b || a < c){
    a1 = a;

    if(b < c){
        b1 = b;
        c1 = c;
    }           
    else if(b > c){
        b1 = c;
        c1 = b;
    }
}

System.out.println("The variables in order of smallest to largest is"
                      + "a=" + a1 + " b=" + b1 + " c="  + c1);

示例:

Please enter the first interger:2
Please enter the second interger:3
Please enter the third interger:1
The variables in order of smallest to largest is a=1 b=3 c=2

2 个答案:

答案 0 :(得分:1)

在所有条件下,您的逻辑OR和AND条件完全倒退。例如。在您的第一个if语句中,如果a大于b并且a大于c,那么您要指定c1价值a(最大)。而且,如果所有值都相同怎么办?然后不满足条件,并打印零。使用<=>=

if (a >= b && a >= c) {

使用<=>=也可以了解每个区块的内部条件。

当您希望else if介于ab之间时,这会在第二个外c内继续,b <= a&lt; = c或c &lt; = a&lt; = b。

else if ((a <= b && a >= c) || (a <= c && a >= b)) {

继续到最后一个条件:

else if (a <= b && a <= c) {

但是,如果你到达这里总是如此,因为它上面的其他2个条件都是假的,所以一个简单的else是等价的。

答案 1 :(得分:0)

你的程序过于复杂。根据定义,a1abc的最小值。虽然c1abc的最大值。我使用Math.minMath.max来计算它们。接下来,中间项是(根据定义)不是a1c1的中间项。我们可以通过将所有项加在一起然后减去最小和最大来计算。最后,我更喜欢printf(和格式化的IO)。像,

int a1 = Math.min(c, Math.min(a, b));
int c1 = Math.max(c, Math.max(a, b));
int b1 = a + b + c - a1 - c1;
System.out.printf("The variables in order of smallest to largest are "
        + "a=%d, b=%d, c=%d%n", a1, b1, c1);