0

编写一个名为 removeSomePoints 的方法。此方法接受一个点数组,并返回一个与原始数组相同的新点数组,除了它删除所有 x 和 y 坐标相差小于 20 的点。换句话说,返回的数组可能比原始数组的大小更小。此方法应保持原始数组不变。澄清:如果以下任何点在原始数组中,它们将不在返回的数组中。

100 90(x 和 y 相差 10)

90 100(x 和 y 相差 10)

3 22(x 和 y 相差 19)

另一方面,以下任何点都将在返回的数组中:

100 80(x 和 y 相差 20)

80 100(x 和 y 相差 20)

2 25(x 和 y 相差 23)

我的代码:

      public static Point[] removeSomePoints(Point[] arr)  {

   int count = 0;      
   for (int i = 0; i < arr.length; i++) {
     if (Math.abs(arr[i].getX() - arr[i].getY()) > 19) {
        count++;
      }
     }

    Point[] finalArr = new Point[count];

    for (int i = 0; i < finalArr.length; i++) {
      if (Math.abs(arr[i].getX() - arr[i].getY()) > 19) {
           finalArr[i] = arr[i];
      }

 }

   return finalArr;
}

我还使用 ArrayLists 使用此代码进行了尝试:

 public static Point[] removeSomePoints(Point[] arr) {
    ArrayList<Point> pointList = new ArrayList<Point>(Arrays.asList(arr));
    for (int i = 0; i < pointList.size(); i++) {
        if (Math.abs(pointList.get(i).getX() - pointList.get(i).getY()) < 20) {
            pointList.remove(i);

        }
    }
    Point[] finalArr = new Point[pointList.size()];
    finalArr = pointList.toArray(finalArr);

    return finalArr;
}

上述代码块都不适用于我完成的返回数组应该是什么,许多点(例如 Point(6, 3) 当它们的绝对差肯定小于 19 时被留下)。

似乎无法弄清楚出了什么问题。它正在返回一个数组,但它不会改变任何东西。在我的主要方法中,我有:

    Scanner scan = new Scanner(System.in);
    System.out.print("Please enter name of file containing Points: ");
    String fileName = scan.next();
    Point[] myPoints = readPoints(fileName);
    sortPoints(myPoints); // works fine
    writePoints(myPoints, "sorted.txt");  //works fine up until this point
    removeSomePoints(myPoints)       //doesn't work, effects below method call
    writePoints(myPoints, "sortedAndRemoved.txt");
    new PointDisplay(myPoints, 10, false);  //works fine, pre-written class

我在问我的 removeSomePoints 方法有什么问题以及可以采取哪些不同的方法。如何正确删除并返回点数组,其中所有点的绝对差为 19 及以下已删除?

4

1 回答 1

1

您正在返回一个新数组,但没有将原始数组设置为返回值。你应该改变

removeSomePoints(myPoints)       //doesn't work, effects below method call

myPoints=removeSomePoints(myPoints);       //works now

那应该可以解决您的问题。

注意:这与 sortPoints 不同,因为您对数组进行了就地排序,但您创建了一个新数组来删除这些点。

于 2013-01-19T04:08:58.253 回答