排序数组正负距离值

时间:2017-07-03 04:18:00

标签: java android arrays sorting

我有一个使用(距离)方法计算的距离数组 其中包含负值和正值都是这样的

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 

3 个答案:

答案 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更好。

供参考,您可以看到另一个相关问题

How to sort an array of ints using a custom comparator?

答案 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