编写一个名为 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 及以下已删除?