2014-02-14 40 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语句,但为什么比它应该更难呢?让我知道您是否需要任何帮助