我遇到以下问题:我正在使用看起来像这样的点数列表
List<Point> list = new ArrayList<Point>();
现在我试图通过他的坐标检查一个新点是否已经是列表的成员和它的前一个邻居。
if ((!list.contains(point)) && list.contains(point.getX() - 1)) {
......
}
现在的问题是这个表达式永远不会成立,虽然我可以清楚地看到,使用调试器,位于其左侧的位置(x-1,y)的点(高度在这里不是很有趣) )在列表中,而点本身不在。
有什么想法吗?
答案 0 :(得分:3)
问题在于list.contains(point.getX() - 1)
。您正在检查是否存在整数而不是Point
对象。这是因为ArrayList#contains()
采用Object
参数 - 编译器将整数视为一个对象并且对它很好。
您需要显式传递Point
实例,例如:
Point neighborPoint = new Point(point.getX() - 1, point.getY());
if (!list.contains(point) && list.contains(neighborPoint)) {
...