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