簡體   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