是否可以更新 class 点的位置?
Is it possible to update location of Point class?
我有一个带有 Point
场的粒子。我想抓住这个 Point
,在它周围创建一个假想的正方形点(仅整数),并将所有点添加到列表中,只要它们不在列表中 getstuck
。这大概是我想要的样子:
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);
}
}
}
}
问题是语法 ps += (i,j);
不起作用,我可以使用类似的东西吗?
我知道我可以每次抓取粒子点然后像这样分别加上i
和j
;
Point ps = new Point(particle.getX()+i, particle.getY()+j)
但这使我的代码效率低下。我只想从 particle
调用 point
一次,然后为每个 forloop
更新它,而不必再次调用 point
。
如果我们讨论的是 java.awt.Point
对象,那么 Point 对象的 x 和 y 字段就是 public 字段,因此您可以简单地更新 Point 的 x 和 y 字段直接反对:
ps.x += i;
for (int j = -3; j < 4; j++) {
ps.y += j;
if (!getstuck.contains(ps)) {
getstuck.add(ps);
}
}
为坐标 x
、y
提供设置器。您无需再次创建新实例,而是将值设置为您已经获得的实例:
ps.setX(ps.getX() + i);
ps.setY(ps.getY() + j);
请注意,它使 class 可变。不再有最终坐标。
说法ps += (i,j);
完全不正确。您不能通过 (i, j)
构建对象。您也不能为 Point
重载 +=
运算符。
但是您可以通过静态方法绕过运算符重载 merge(Point a, Point b)
。它没有意义,因为您需要形成第二个参数并传递它。
方法 merge(Point p, int x, int y)
不是面向对象的方法。
您可以通过阅读 Point
class 的 Java API 文档来回答此类问题。从谷歌搜索 "java point" 开始,它应该会给你一个 link 到 https://docs.oracle.com/javase/8/docs/api/java/awt/Point.html.
然后向下滚动到字段,您将看到 int x
和 int y
的描述。由于这些显示在文档中,您自动知道您可以访问它们。要检查它们是 public 还是受保护,请单击字段名称以获取更多详细信息。 When you click on x
,你会看到它是public。这意味着您可以直接访问它并按照您希望的任何方式修改它,如其他答案所示。
阅读此类文档是学习如何在 Java 中编程的一项关键技能。
我有一个带有 Point
场的粒子。我想抓住这个 Point
,在它周围创建一个假想的正方形点(仅整数),并将所有点添加到列表中,只要它们不在列表中 getstuck
。这大概是我想要的样子:
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);
}
}
}
}
问题是语法 ps += (i,j);
不起作用,我可以使用类似的东西吗?
我知道我可以每次抓取粒子点然后像这样分别加上i
和j
;
Point ps = new Point(particle.getX()+i, particle.getY()+j)
但这使我的代码效率低下。我只想从 particle
调用 point
一次,然后为每个 forloop
更新它,而不必再次调用 point
。
如果我们讨论的是 java.awt.Point
对象,那么 Point 对象的 x 和 y 字段就是 public 字段,因此您可以简单地更新 Point 的 x 和 y 字段直接反对:
ps.x += i;
for (int j = -3; j < 4; j++) {
ps.y += j;
if (!getstuck.contains(ps)) {
getstuck.add(ps);
}
}
为坐标 x
、y
提供设置器。您无需再次创建新实例,而是将值设置为您已经获得的实例:
ps.setX(ps.getX() + i);
ps.setY(ps.getY() + j);
请注意,它使 class 可变。不再有最终坐标。
说法ps += (i,j);
完全不正确。您不能通过 (i, j)
构建对象。您也不能为 Point
重载 +=
运算符。
但是您可以通过静态方法绕过运算符重载 merge(Point a, Point b)
。它没有意义,因为您需要形成第二个参数并传递它。
方法 merge(Point p, int x, int y)
不是面向对象的方法。
您可以通过阅读 Point
class 的 Java API 文档来回答此类问题。从谷歌搜索 "java point" 开始,它应该会给你一个 link 到 https://docs.oracle.com/javase/8/docs/api/java/awt/Point.html.
然后向下滚动到字段,您将看到 int x
和 int y
的描述。由于这些显示在文档中,您自动知道您可以访问它们。要检查它们是 public 还是受保护,请单击字段名称以获取更多详细信息。 When you click on x
,你会看到它是public。这意味着您可以直接访问它并按照您希望的任何方式修改它,如其他答案所示。
阅读此类文档是学习如何在 Java 中编程的一项关键技能。