2014-02-14 73 views
0

我不斷收到1/3的不正確輸出。當我輸入132或231時,所需的輸出是123。當我輸入321時,輸出是132,我在這裏錯過了什麼?使用分支if else語句排序

import java.util.Scanner; 

public class Proj3 { 
    private static int min; 
    private static int max; 
    private static int mid; 

    public static void main (String[] args){ 
     Scanner keyboard = new Scanner(System.in); 
     System.out.println("Enter three whole numbers <integers> to be sorted"); 
     int n1 = keyboard.nextInt(); 
     int n2 = keyboard.nextInt(); 
     int n3 = keyboard.nextInt(); 

     if (n1 <= n2 && n1 <= n3){ 
      min = n1; 

      if (n2 <= n3){ 
       mid = n2; 
       max = n3; 
      } else{ 
       mid = n3; 
       max = n2; 
      } 
     } 
     else if(n2 <= n3){ 
      min = n3; 
      mid = n1; 
      max = n2; 
     }else{ 
      min = n3; 
      mid = n1; 
      max = n2; 
     } 
     System.out.println("Here are the three numbers sorted:"+min+""+mid+""+max+""); 
    } 
} 
+1

在調試器中跟蹤您的代碼可能會幫助您查看代碼中發生的情況,並且錯誤對您很明顯。 – Laf

+1

或者用筆和紙看看你的邏輯有什麼問題。 –

回答

1

而是一個分支,如果,你可以只使用Math.minMath.max得到的最小和最大數字(中間的一個是唯一剩下的號碼)

0

你忘了,如果分支。對於輸入321,你在else塊中運行,並導致你的輸出。試着弄清楚你忘記了哪種情況,如果有其他情況,可以將其添加爲其他情況。

編輯: 如果n1> n2它仍然不清楚它是否小於或大於n3。

0

對於那些幫助我通過@ZouZou,@ ROT13,@Laf進行思考的人來說,這是我的解決方案。

else if(n2 >= n3 && n2 <= n1){ 
     max = n1; 
     mid = n2; 
     min = n3;} 
0

你可以稍微改變一下你的代碼並使用一個數組。從掃描儀讀入數值,然後將它們添加到數組中。從數組中,您可以使用.sort()方法,該方法將自動按順序排列數字。

Scanner input = new Scanner(System.in); // Starts scanner 
    int[] numbers = new int[3]; // Sets length to 3 

for (int i = 0; i < numbers.length; i++) // Loops length 
{ 
    System.out.println("Please enter number"); // Asks for input 
    numbers[i] = input.nextInt(); // Adds to array 
} 

的值進行排序後,您可以撥打int[]陣列上的.sort()方法。我希望這是有道理的。你可以使用你所有的if語句,但爲什麼比它應該更難呢?讓我知道您是否需要任何幫助