我开始学习 Java。目前我被困在按照对象中浮点值的升序对对象数组进行排序。目标是从数据数组中绘制图形。在绘制图形之前,我必须对坐标进行排序,以便 x
值按升序排列。因此,我将它们放在一个对象中以将 x
和 y
数据链接在一起。
我从 2 个浮点数组开始:
float[] xValues = {-5.6f, 2.1f, 0.1f, 4.4f, 8.5f, -1.6f};
float[] yValues = {1.0f, 2.4f, 5.7f, -2.8f, -6.4f, 2.9f};
比我使用这个函数把它放到一个 Point 对象数组中:
graphPoints = new Point[arrayLength];
for (int i = 0; i < graphPoints.length; i++) {
graphPoints[i] = new Point();
}
for (int i = 0; i < graphPoints.length; i++) {
graphPoints[i].x = x[i];
graphPoints[i].y = y[i];
}
包含此对象:
class Point {
public float x;
public float y;
}
我在网上找到的可能解决方案建议使用 comparator<Point>
对对象数组进行排序,这是我还没有学到的。使用我发现的示例无法使其与浮点值一起使用。所有示例都适用于 int 字符串。
我错过了什么吗?有没有合适的方法来做到这一点?谁能给我一些关于这个主题的指导?
答案 0 :(得分:3)
比较器是正确的方法。您可以对 x 和 y 值的数组进行排序,以便对 Points 的结束数组进行排序,但我认为让您的点类实现 Comparable 接口更好,更不容易出错。
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;
}
}
}
然后你就可以打电话
Arrays.sort(graphPoints);
对其进行排序。
切换 1 和 -1 返回值将切换是按升序还是降序排序。
说明
当您调用 Arrays.sort
方法时,它会使用 compareTo 方法比较数组中的每个点。如果 compare to 返回 1,则 sort 方法知道该点被认为大于它所比较的另一个点。如果为 0,则它们相等。如果它是 -1,那么它更少。这是标准的方法,可以轻松地对数组进行排序,而无需自己编写排序代码,这可能会很混乱且效率低下。
此外,只需更改 compareTo 方法,即可轻松更改排序行为。您可以更改它是升序还是降序,以及您的排序依据。例如,如果您愿意,只需在一处更改 compareTo,就可以轻松更改它是按 x 值还是按 y 值排序。
答案 1 :(得分:0)
您可以使用 Arrays#sort(T[],Comparator)
方法如下:
Arrays.sort(graphPoints, Comparator.comparing(Point::getX));
在这种情况下,您必须将 getter 方法添加到 Point
类:
class Point {
public float x;
public float y;
public float getX() {
return x;
}
public float getY() {
return y;
}
}