【问题标题】:Searching Point in a list by its position按位置在列表中搜索点
【发布时间】:2016-02-19 03:08:11
【问题描述】:

我有以下问题:我正在使用看起来像这样的点列表

List<Point> list = new ArrayList<Point>();

现在我正在尝试通过他的坐标检查一个新点是否已经是列表的成员以及它的前一个邻居。

if ((!list.contains(point)) && list.contains(point.getX() - 1)) {
......
}

现在的问题是这个表达式永远不是真的,虽然我可以清楚地看到,使用调试器,一个位置为 (x-1, y) 的点在它的左边(高度在这里并不有趣) 在列表内,而点本身不在。

有什么想法吗?

【问题讨论】:

  • 这里有些奇怪。在条件的第一部分中,您正在检查列表是否包含Point 类型的对象,在第二部分中,您正在检查它是否包含@ 987654324@..(我假设).. 对吗?
  • 不是类型点的对象,它是具有 x 和 y 值的点。第二个你理解正确。示例:我的观点是(5,5)。我正在检查是否还有另一个值 (4,y)
  • 这就是您正在检查的内容。请参阅下面的答案。
  • 是的,但是 point 是一个设置了 x 和 y 值的对象。点点 = 新点()。它不是 list.contains(Point);
  • 写了..这就是为什么我说它是类型 Point。希望答案对您有所帮助。

标签: java list contains point


【解决方案1】:

问题在于list.contains(point.getX() - 1)。您正在检查 integer 的存在,而不是 Point 对象。这是因为ArrayList#contains() 采用Object 参数——编译器将整数视为对象并且可以处理。

您需要显式传递一个Point 实例,例如:

Point neighborPoint = new Point(point.getX() - 1, point.getY());

if (!list.contains(point) && list.contains(neighborPoint)) {
   ...

【讨论】:

  • 啊,我明白了。但是为什么有必要有一个构造函数 Point(int x, int y)。为什么我不能使用 awt 对象点?
  • @JürgenK。我不知道你在使用java.awt.Point(你没有在任何地方提到它)。是的,您可以在该类中使用可用的构造函数。
  • 但是我还需要自己写equals方法吗?对不起,我认为它很清楚。
  • 我错过了更新我的答案。 java.awt.Point 已经覆盖 equals
猜你喜欢
  • 2021-05-19
  • 1970-01-01
  • 1970-01-01
  • 2018-06-29
  • 1970-01-01
  • 1970-01-01
  • 2019-12-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多