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);