Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 按浮点值排序对象数组_Java_Arrays_Sorting_Object - Fatal编程技术网

Java 按浮点值排序对象数组

Java 按浮点值排序对象数组,java,arrays,sorting,object,Java,Arrays,Sorting,Object,我开始学习Java。目前,我一直在按照对象中浮点值的升序对对象数组进行排序。目标是从数据数组中绘制图形。在绘制图形之前,我必须对坐标进行排序,以便x值按升序排列。所以我把它们放在一个对象中,将x和y数据链接在一起 我从两个浮点数数组开始: float[]xValues={-5.6f、2.1f、0.1f、4.4f、8.5f、-1.6f}; float[]y值={1.0f,2.4f,5.7f,-2.8f,-6.4f,2.9f}; 然后使用以下函数将其放入点对象数组: graphPoints=新点[

我开始学习Java。目前,我一直在按照对象中浮点值的升序对对象数组进行排序。目标是从数据数组中绘制图形。在绘制图形之前,我必须对坐标进行排序,以便
x
值按升序排列。所以我把它们放在一个对象中,将
x
y
数据链接在一起

我从两个浮点数数组开始:

float[]xValues={-5.6f、2.1f、0.1f、4.4f、8.5f、-1.6f};
float[]y值={1.0f,2.4f,5.7f,-2.8f,-6.4f,2.9f};
然后使用以下函数将其放入点对象数组:

graphPoints=新点[排列长度];
for(int i=0;i
包含此对象:

类点{
公共浮动x;
公众浮躁;
}
我在网上找到的可能解决方案建议使用
比较器对对象数组进行排序,这是我还没有学会的。使用我发现的示例无法使其与浮点值一起工作。所有示例都使用int的任意字符串


我错过什么了吗?有没有合适的方法?谁能在这个话题上给我一些指导呢?

比较法是正确的选择。您可以对x和y值数组进行排序,以便对结束的点数组进行排序,但我认为让您的点类实现可比较的接口更好,也更不容易出错

class Point implements Comparable<Point>{
    public float x;
    public float y;
    
    @Override
    public int compareTo(Point o) {
       if(this.x>o.x){
           return 1;
       }else if(this.x==o.x){
           return 0;
       }else{
           return -1;
       }
    }
}
类点实现可比较{
公共浮动x;
公众浮躁;
@凌驾
公共int比较(o点){
如果(此.x>o.x){
返回1;
}else if(this.x==o.x){
返回0;
}否则{
返回-1;
}
}
}
那你就可以打电话了

Arrays.sort(graphPoints)对其进行排序

切换1和-1返回值将切换它是按升序还是降序排序

解释

当您调用
Arrays.sort
方法时,它将使用compareTo方法比较数组中的每个点。如果compare to返回1,则排序方法知道该点被视为大于它所比较的另一点。如果为0,则它们相等。如果它是-1,那么它就更少了。这是一种标准方法,可以轻松地对数组进行排序,而无需自己编写排序代码,这可能会造成混乱和效率低下

此外,只需更改compareTo方法,即可轻松更改排序行为。您可以更改它是按升序还是降序排列,以及排序依据。例如,如果您想更改,只需将compareTo更改为一个位置,就可以轻松地更改它是按x值排序还是按y值排序。

您可以使用以下方法:

Arrays.sort(graphPoints,Comparator.comparing(Point::getX));
在这种情况下,必须将getter方法添加到
类:

类点{
公共浮动x;
公众浮躁;
公共浮点getX(){
返回x;
}
公共浮球{
返回y;
}
}


另请参见:

这是一个很好的解决方案,但从最纯粹的意义上讲,
可比较的
接口应该由实例具有自然顺序感的类实现,即明确说明实例的顺序。对于像
biginger
这样的类来说,这是非常直观的,它们的值显然具有自然顺序,但对于
Point
实例来说,这一点就不那么清楚了,因为它们可以通过多种方式进行排序。一个可能更清晰的解决方案是使用一个单独的
比较器
实例作为策略,并使用该模式显式排序。