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 に答える