简体   繁体   English

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

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

I am wring program that sorts three integers.我正在编写对三个整数进行排序的程序。 But I am not getting result for the input {1,3,2}.但是我没有得到输入 {1,3,2} 的结果。 Probably some logic mistake in the 4th if statement.可能在第四个 if 语句中有一些逻辑错误。

The numbers are taken as input.数字作为输入。

// program to sorting 3 double. // 对 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);

    }
}

If you are happy with an array, you may use the Arrays.sort() method:如果您对数组感到满意,可以使用Arrays.sort()方法:

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

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

I would do it with arrays.我会用数组来做。 Example :例子 :

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;
    }
}

This function takes an array, looks for the biggest element, writes it down, sets it to null, calls itself, looks for the biggest element, excludes the taken, because they were set to null, writes the biggest number again...这个函数接受一个数组,寻找最大的元素,把它写下来,把它设置为空,调用自己,寻找最大的元素,排除所取的,因为它们被设置为空,再次写下最大的数字......

Example of how it works :它是如何工作的示例:

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

First sorting :第一次排序:

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

Second sorting :第二次排序:

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

Third sorting :第三次排序:

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

A fourt sorting isnt executed because it notices that bestnum is null because it couldnt be set.不执行四排序,因为它注意到 bestnum 为空,因为它无法设置。

This function is more flexible and can sort a almost infinite amount of numbers much easier.此功能更灵活,可以更轻松地对几乎无限数量的数字进行排序。

And here is how I would integrate it in your code :这是我将它集成到您​​的代码中的方式:

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)));
    }
}

EDIT :编辑 :

I saw this and realized that you'd probably like to sort them the other way round.我看到了这一点,并意识到您可能希望以相反的方式对它们进行排序。

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

Then you'll only have to change this :那么你只需要改变这个:

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

to this :对此:

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