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以下のすべてのポイントを削除したポイント配列を正しく削除して返すにはどうすればよいですか?