2015-10-12 80 views
0

我遇到了一個簡單的排序程序問題。這個程序是爲了從用戶接收3個整數,並從小到大排列。它工作正常,如果它是最大的,但它不會工作,如果它不是。if else排序程序沒有正確排序

代碼:

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 

回答

1

你有你的邏輯OR和AND條件完全向後您的所有條件。例如。在您的第一個if聲明中,如果a大於ba大於c,那麼您希望將c1的值指定爲a(最大)。另外,如果所有的值都是一樣的呢?然後不滿足條件,並打印零。使用<=>=

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

使用<=>=針對每個塊還內的條件。

這繼續在第二外else if,當你想abc,b之間是否< =一個< = C或C = <一個< = B。

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

,並繼續最後一個條件:

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

但是,如果你來到這裏,因爲其他2種條件下,它上面的都是假的,所以一個簡單的else等同,將永遠是正確的。

0

你的程序過於複雜。根據定義,a1是最小的a,bc。而c1a,bc的最大值。我會用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);