我有一个使用(距离)方法计算的距离数组 其中包含负值和正值都是这样的
float num[] = {-123.81944, 34.56723, -133.40782};
尝试使用时
Arrays.sort(num);
结果是
-123.81944
-133.40782
34.56723
这是不正确的,因为-133.40782位置比-123.81944更接近
如何将数组排序为此结果
-133.40782
-123.81944
34.56723
答案 0 :(得分:1)
如果要使用float
作为数据类型,则应按如下方式声明数组。否则,您可以使用double
作为数据类型,以避免在数字中添加后缀f
。
float[] num = {-123.81944f, 34.56723f, -133.40782f};
// or, double[] num = {-123.81944, 34.56723, -133.40782};
Arrays.sort(num);
System.out.println(Arrays.toString(num));
<强>输出强>
[-133.40782, -123.81944, 34.56723]
直播demo。
答案 1 :(得分:1)
假设有一个数组A
包含负数,零和正数。你需要对它们进行排序,你会怎么做。当然,你会考虑自然排序,并将其排序为负数,然后是零,然后是正数。这就是Arrays.sort()
的作用。
如果您希望对参考点的距离进行排序,我觉得您的预期结果不正确。如果我们考虑一条线,一个参考点,然后在它的左边是负距离,在它上面是正距离,那么排序应该基于绝对值。
您的业务要求是进行自定义排序。要进行任何排序,您需要有一个比较逻辑。为此,java提供了Comparator
。您需要实现基于业务逻辑的比较以进行排序。 [提示:比较你可以比较绝对值,Math.abs可能有帮助]
浮点数以f
结尾,因此每个数组元素的余量f
更好。
供参考,您可以看到另一个相关问题
答案 2 :(得分:-1)
对我来说,使用标准的Java JRE,它的工作方式与(你)预期的一样,但我不得不将浮点文字中的数字转换为。否则它没有编译:
float num[] = new float[] {-123.81944f, 34.56723f, -133.40782f};
Arrays.sort(num);
for (int i = 0; i < num.length; i++) {
System.out.print(" " + num[i]);
}
打印-133.40782 -123.81944 34.56723