繁体   English   中英

无法在 Java 中对 3 个浮点数进行排序

[英]Can't sort 3 floating point numbers in Java

我正在编写对三个整数进行排序的程序。 但是我没有得到输入 {1,3,2} 的结果。 可能在第四个 if 语句中有一些逻辑错误。

数字作为输入。

// 对 3 double 进行排序的程序。

import java.util.*;

public class Sorting {

    public static void main(String[] args) {

        Scanner in = new Scanner(System.in);

        System.out.println("Input the numbers for sorting");

        double num1 = in.nextDouble();
        double num2 = in.nextDouble();
        double num3 = in.nextDouble();

        double a = 0;
        double b = 0;
        double c = 0;

        if ((num1 > num2) && (num2 > num3)) {
            a = num1;
            b = num2;
            c = num3;
        }
        if ((num1 > num2) && (num3 > num2)) {
            a = num1;
            b = num3;
            c = num2;
        }

        if ((num2 > num1) && (num1 > num3)) {
            a = num2;
            b = num1;
            c = num3;
        }

        if ((num2 > num1) && (num3 > num1)) {
            a = num2;
            b = num3;
            c = num1;
        }

        if ((num3 > num1) && (num1 > num2)) {
            a = num3;
            b = num1;
            c = num2;
        }

        if ((num3 > num1) && (num2 > num1)) {
            a = num3;
            b = num2;
            c = num1;
        }
        System.out.println(" The numbers are in" + c + "< " + b + "< " + a);

    }
}

如果您对数组感到满意,可以使用Arrays.sort()方法:

    double[] numbers = new double[] { num1, num2, num3 };
    Arrays.sort(numbers);
    System.out.println("The numbers are " + Arrays.toString(numbers));

给定输入1 3 2这会打印The numbers are [1.0, 2.0, 3.0]

我会用数组来做。 例子 :

class DoubleSorter {
    public double[] sorted;
    public boolean[] deleted;
    public int array_position=0;
    public int element_to_delete=0;
    public DoubleSorter() {
    }
    public void self_calling_sorter(double[] numbers) {
        double bestnum=0;
        boolean finished=true;
        for (int i=0; i < numbers.length; i++) {
             if (deleted[i] == false) {
                 if (finished==true) { //First set to bestnum
                     bestnum=numbers[i];
                     element_to_delete=i;
                     finished=false;
                 }
                 else {
                     if (numbers[i] >= bestnum) {
                         bestnum=numbers[i];
                         element_to_delete=i;
                     }
                 }
             }
         }
         deleted[element_to_delete]=true;
         if (finished==false) {
             sorted[array_position]=bestnum;
             array_position++;
             self_calling_sorter(numbers);
         }
    }

    public double[] sort(double[] numbers) {
        sorted=new double[numbers.length];
        deleted=new boolean[numbers.length];
        for (int i=0; i < numbers.length; i++) {
             deleted[i]=false;
        }
        self_calling_sorter(numbers);
        return sorted;
    }
}

这个函数接受一个数组,寻找最大的元素,把它写下来,把它设置为空,调用自己,寻找最大的元素,排除所取的,因为它们被设置为空,再次写下最大的数字......

它是如何工作的示例:

numbers={1,3,2};
result={null,null,null};

第一次排序:

result={3,null,null};
numbers={1,null,2};

第二次排序:

result={3,2,null};
numbers={1,null,null};

第三次排序:

result={3,2,1};
numbers={null,null,null};

不执行四排序,因为它注意到 bestnum 为空,因为它无法设置。

此功能更灵活,可以更轻松地对几乎无限数量的数字进行排序。

这是我将它集成到您​​的代码中的方式:

import java.util.*;

public class Sorting {

    public static void main(String[] args) {
        DoubleSorter sorter=new DoubleSorter();
        Scanner in = new Scanner(System.in);
        System.out.println("How many numbers would you like to sort ?");
        int count = in.nextInt();
        double[] numbers=new double[count];
        for (int i=0; i < count; i++) {
             System.out.println("Number "+Integer.toString(i));
             numbers[i]=in.nextDouble();
        }
        System.out.println("The sorted list is : "+Arrays.toString(sorter.sort(numbers)));
    }
}

编辑 :

我看到了这一点,并意识到您可能希望以相反的方式对它们进行排序。

 System.out.println(" The numbers are in" + c + "< " + b + "< " + a);

那么你只需要改变这个:

if (numbers[i] >= bestnum) {
    bestnum=numbers[i];
    element_to_delete=i;
}

对此:

if (numbers[i] <= bestnum) {
    bestnum=numbers[i];
    element_to_delete=i;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM