我试图创建两个类,一个用于定义一个点,另一个用于数组操作。我试图创建一种方法,根据y坐标按升序对坐标数组进行排序。我已尝试过以下示例,但我一直遇到运行时错误,其中数组只是部分排序。
public class Point
{
private double x;
private double y;
public Point(double x_coord, double y_coord)
{
x = x_coord;
y = y_coord;
}
public boolean lessThan(Point anotherPoint)
{
if(y < anotherPoint.y)
{
if(x < anotherPoint.x)
{
return true;
}
}
return false;
}
}
public class PointArray
{
private Point[] points = new Point[count];
public PointArray(double[] doubleArray)
{
if(doubleArray.length % 2 == 0)
{
for(int i = 0, j = 0; i < 3; i++, j += 2)
{
double x = doubleArray[j];
double y = doubleArray[j + 1];
points[i] = new Point(x, y);
}
}
else
{
System.out.println("Error: The given array must be even.");
System.exit(0);
}
}
public void sort()
{
double x = 0;
double y = 0;
Point newPoint = new Point(x, y);
Point temp = new Point(x, y);
for (int i = 0; i < points.length - 1; i++)
{
for(int j = i + 1; j < points.length; j++)
{
int minIndex = i;
if(points[minIndex].lessThan(points[j]) == false)
{
temp = points[minIndex];
points[minIndex] = points[j];
points[j] = temp;
}
}
}
}
此代码使数组{5.6, 7.1, 4.9, 13.17, 9.3, 2.9}
首先存储为有序对{(5.6, 7.1), (4.9, 13.17), (9.3, 2.9)}
。但它没有正确排序。交换第一个和第三个点后,第二个和第三个点不交换,即使第三个点的y坐标较小。
[(9.3, 2.9), (4.9, 13.17), (5.6, 7.1)]
编辑:另一个问题似乎与同一作业有关。该方法应该采用两个PointArray对象,并通过x和y组件对它们进行相等性比较。我的想法是对两个数组进行排序,然后使用Point类中的方法比较组件,但我不确定如何根据(x,y)点定义每个PointArray。
public boolean equals(Point anotherPoint)
{
if(x == anotherPoint.x && y == anotherPoint.y)
{
return true;
}
return false;
}
public boolean equals(PointArray anotherPointArray)
{
double x = 0;
double y = 0;
double xAnother = 0;
double yAnother = 0;
Point newPoint = new Point(x, y);
Point newAnotherPoint = new Point(xAnother, yAnother);
anotherPointArray.sort();
for(int i = 0; i < points.length; i++)
{
for(int j = 0; i < points.length; j++)
{
if(newPoint.equals(newAnotherPoint))
{
return true;
}
}
}
return false;
}
答案 0 :(得分:0)
只有当x和y都较小时,您当前的lessThan
方法才会生效。要按y进行排序,请使用
public boolean lessThan(Point anotherPoint)
{
return y < anotherPoint.y;
}