Java 是否可以更新点类的位置?

Java 是否可以更新点类的位置?,java,point,Java,Point,我有一个粒子有一个点场。我想抓住这个点,在其周围创建一个虚设的点平方(仅整数),并将所有点添加到列表中,只要它们不在列表中getstack。这大概就是我想要的样子: public void pointStuck(Particle particle) { Point ps = particle.getPoint(); for (int i = -3; i < 4; i++) { for (int j = -3; j < 4; j++) {

我有一个粒子有一个
场。我想抓住这个
,在其周围创建一个虚设的点平方(仅整数),并将所有点添加到列表中,只要它们不在列表中
getstack
。这大概就是我想要的样子:

public void pointStuck(Particle particle) {
    Point ps = particle.getPoint();
    for (int i = -3; i < 4; i++) {
        for (int j = -3; j < 4; j++) {
            ps += (i,j);
            if (getstuck.contains(ps) == false) {
                getstuck.add(ps);
            }
        }
    }
}

但这使得我的代码效率低下。我想从
particle
调用
一次,然后每次
forloop
更新它,而不必再次调用

如果我们讨论
java.awt.point
对象,那么点对象的x和y字段就是公共字段,因此,您可以直接更新点对象的x和y字段:

ps.x += i; 
for (int j = -3; j < 4; j++) {
    ps.y += j;
    if (!getstuck.contains(ps)) {
        getstuck.add(ps);
    }
}
ps.x+=i;
对于(int j=-3;j<4;j++){
ps.y+=j;
如果(!getstuck.contains(ps)){
getstack.add(ps);
}
}

为坐标
x
y
提供设置器。您可以为已获得的实例设置值,而不是再次创建新实例:

ps.setX(ps.getX() + i);
ps.setY(ps.getY() + j);
注意,它使类可变。不再有最终坐标


语句
ps+=(i,j)完全不正确。不能通过
(i,j)
构建对象。您也不能为
重载
+=
运算符

但是您可以通过静态方法
merge(点a,点b)
绕过运算符重载。因为您需要形成第二个参数并传递它,所以它没有什么意义


方法
合并(Point p,int x,int y)
不是面向对象的方法。

您可以通过阅读
Point
类的Java API文档来回答这些问题。从谷歌搜索“java point”开始,它会给你一个链接

然后向下滚动到字段,您将看到
intx
inty
的描述。由于这些文件显示在文档中,因此您自动知道可以访问它们。要检查它们是公共的还是受保护的,请单击字段名称以了解更多详细信息,你会发现它是公开的。这意味着您可以直接访问它,并按照其他答案所示的任何方式修改它


阅读这类文档是学习如何使用Java编程的关键技能。

我假设
I
j
是类
ps.x+=I中的int坐标
ps.y+=j我建议您学习如何查找和阅读JavaAPI文档。谷歌搜索“java point”会让你开始。@Code Peeditor如果你是说,我已经读过了,但没有找到解决我问题的方法。可能遗漏了什么。请参阅我的答案,其中解释了如何从链接的文档中找到问题的答案。我希望这能帮助您更好地理解如何阅读JavaAPI文档。在文档中找到问题的答案将节省大量时间。可以建议“编程到接口”
Point2D
并使用,但在这种情况下,这远不如
+=
简洁,而且(更重要的是):如果对象确实是
Point
对象,这可能会产生误导,正如它所建议的那样,双坐标实际上只是
int
。(点扩展点2D
是处理“遗留”点类的合理方法,但可能有一些警告…)请参见编辑,正如您在输出中看到的,更新点的不同方法不会给出相同的结果。我将我的第一个低效解决方案与您提出的解决方案进行了比较@Hovercraft Full Eelthank you!我按照您所说的进行工作,并使用
setLocation()
-方法来处理
ps.setLocation(ps.getX()+I,ps.getY()+j)
ps.setX(ps.getX() + i);
ps.setY(ps.getY() + j);