【问题标题】:Java - How to remove elements from a Point Array and correctly return new fixed ArrayJava - 如何从点数组中删除元素并正确返回新的固定数组
【发布时间】:2013-01-19 04:03:12
【问题描述】:

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

【问题讨论】:

  • 这是一个不同的问题——它问的是为什么程序的其余部分没有考虑到他的功能,而不是功能本身。
  • 好的,忽略我的评论并关闭投票,我看到 OP 已转到同一问题的另一部分。

标签: java arrays return point


【解决方案1】:

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

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

myPoints=removeSomePoints(myPoints);       //works now

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

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

【讨论】:

  • 点击此答案左侧的绿色空心复选标记将其标记为正确
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-15
  • 2021-12-11
  • 2014-01-20
  • 2022-01-13
  • 2016-10-31
  • 1970-01-01
  • 2015-03-23
相关资源
最近更新 更多