2015-10-09 9 views
1

Здравствуйте, я пытаюсь создать код, который извлекает из цепочки три целых числа и сортирует их по минимальным, средним и максимальным значениям. Я не могу понять среднее программирование. Он не всегда будет сортировать их правильно. Вы можете помочь?Сортировка трех целых чисел в командной строке

public class SortInteger{ 

public static int max3(int a, int b, int c) { 
     int max = a; 
     if (b > max) max = b; 
     if (c > max) max = c; 
     return max; 
    } 

public static int min3(int a, int b, int c) { 
     int min = a; 
     if (b < min) min = b; 
     if (c < min) min = c; 
     return min;} 

public static int sort(int a, int b, int c){ 
    int sort = a; 
     if (sort > b && sort < c) sort = a; 
     else sort = b; 
     if (sort > a && sort < c) sort = b; 
     else sort =c; 
     if (sort > c && sort < a) sort = c; 
     else sort =b; 
     if (sort > c && sort < b) sort = c; 
     else sort = b; 
     if (sort > a && sort < b) sort = c; 
     else sort = c; 
     return sort; 
     } 


public static void main(String[] args){ 
    int a= Integer.parseInt(args [0]); 
    int b=Integer.parseInt(args[1]); 
    int c=Integer.parseInt(args[2]); 
    StdOut.println("Min is " + min3(a, b, c)); 
    StdOut.println("Mid is " + sort(a, b, c)); 
    StdOut.println("Max is " + max3(a, b, c)); 


} 

}

+1

Проводы использование Юр аргинина [0], Arg [1] ... Я беру это ваш знакомый с массивами. Они сделают вашу жизнь невероятно легкой. – frogeyedpeas

+0

Я немного груб в массивах. Спасибо, парни! – spamhair

ответ

4

Try:

public static int mid(int a, int b, int c){ 
    return a + b + c - max(a,b,c) - min(a,b,c); 
} 

Также для min и max просто использовать Math:

public static int min(int a, int b, int c){ 
    return Math.min(Math.min(a,b),c);//Replace with Math.max for max. 
} 
+0

Это самый приятный способ сделать это, хотя я бы не создал для него метод. Приведение в 'int' не нужно,' java.lang.Math' перегружает 'min' и' max', чтобы взять все типы примитивных типов: http://docs.oracle.com/javase/7/docs/api/ java/lang/Math.html # max% 28int,% 20int% 29 – Dici

1

Вы шаговый все над своими собственными пальцами внутри рода функция. Возьмем, к примеру, ваши первые два если заявления:

if (sort > b && sort < c) sort = a; 
else sort = b; 
if (sort > a && sort < c) sort = b; 
else sort =c; 

Если между Ь и с, ваше первое, если утверждение будет верно, и вид будет сохранен в качестве значения а. Но потом подумайте о своем следующем. Значение в a не будет больше a, поэтому второй оператор if будет false и изменит sort на c, даже если вы уже нашли, что это среднее значение. Не то, что вы хотели. Чтобы исправить это, вы можете изменить код, который вы выполняете, когда ваши операторы if верны, чтобы просто вернуть значение сортировки. Так, например:

if (sort > b && sort < c) return sort; 
else sort = b; 
if (sort > a && sort < c) return sort; 
else sort =c; 
// etc. 
+0

Приятно пройти через код OP, чтобы показать, почему это неправильно, вместо того чтобы предоставить совершенно другое решение (что также полезно). +1 – Dici

0

Попробуйте следующее:

public class SortInteger 
{ 
    //use general sorting algorithm for arbitrary length, this is for 3 length specifically 
    public static int[] sort(int[] inputs) 
    { 
     int k; 
     if(inputs[0] >= inputs[1]) 
     { 
      k = inputs[0]; 
      inputs[0] = inputs[1]; 
      inputs[1] = k; 
     } 

     if(inputs[1] >= inputs[2]) 
     { 
      k = inputs[1]; 
      inputs[1] = inputs[2]; 
      inputs[2] = k; 
     } 

     //incase our last element is less than our first we repeat: 

     if(inputs[0] >= inputs[1]) 
     { 
      k = inputs[0]; 
      inputs[0] = inputs[1]; 
      inputs[1] = k; 
     } 

     return inputs 
    } 

    public static void main(String[] args) 
    { 
     int[] x = new int[3]; 
     x[0] = Integer.parseInt(args[0]); 
     x[1] = Integer.parseInt(args[1]); 
     x[2] = Integer.parseInt(args[2]); 
     x = sort(x); 

     System.out.println("min is: " + x[0]); 
     System.out.println("mid is: " + x[1]); 
     System.out.println("max is: " + x[2]); 
    } 


} 
+1

Зачем это сложно? –

+0

Seemd достаточно интуитивно понятен, возможно, мне промыли мозги, но делали метод сортировки по массиву, и это было естественно. Некоторые из приведенных выше трюков - это круто, но не «самый простой способ думать» так же, как «простейший код». – frogeyedpeas

+0

Их проще обдумать, чем выше. –

Смежные вопросы