数组排序太快了

时间:2016-12-01 08:58:52

标签: java arrays sorting

我试图创建两个类,一个用于定义一个点,另一个用于数组操作。我试图创建一种方法,根据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;
}

1 个答案:

答案 0 :(得分:0)

只有当x和y都较小时,您当前的lessThan方法才会生效。要按y进行排序,请使用

public boolean lessThan(Point anotherPoint)
{
    return y < anotherPoint.y;
}