[英]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.