我正在开发一个程序,当它们靠近"墙壁时,它会产生大量的粒子移动,这就是我的JFrame的边缘,它们是应该被卡住了。
到目前为止一切都很好,这实际上是有效的,但现在我想要实施,以便接近已经卡住的其他粒子的粒子也会卡住。 我不会在这些问题上提供任何细节,因为我认为我的问题比这更基本。
见下面的代码:
public void updatePos() {
for (int i = 0; i < numberofparticles; i++) {
for (int j=0; j< numberofparticles; j++) {
if (particlelist.get(i).isStuck()) {
continue;
if (particlelist.get(i).isClose(particlelist.get(j))) {
continue;
particlelist.get(i).x += getL()*Math.cos(Math.random()*2*Math.PI);
particlelist.get(i).y += getL()*Math.sin(Math.random()*2*Math.PI);
}
}
}
}
}
public void isClose(Particle p) {
if (Math.sqrt(getX()*getX() +getY()*getY())-Math.sqrt(p.getX()*p.getX() +p.getY()*p.getY())<=2) {
isStuck();}
}
}
}
public boolean isStuck() {
if (this.x>=610) {
setX(610);
return true;}
else if (this.x<=5) {
setX(5);
return true;
}
else if (this.y<=5) {
setY(5);
return true;
}
else if (this.y>=610) {
setY(610);
return true;}
return false;
}
问题是我的第一个方法,public void updatePos(),行在哪里说:
if (particlelist.get(i).isClose(particlelist.get(j))) {
我的程序不明白isClose实际上正在调用isStuck(),它应该返回一个布尔值,因此我得到了错误:
&#34;类型不匹配:无法从void转换为布尔值&#34;
我可以改变我的方法让我的程序意识到我得到的实际上是一个布尔值吗?
答案 0 :(得分:1)
请按以下方式更新您的方法
public boolean isClose(Particle p) {
if (Math.sqrt(getX()*getX() +getY()*getY())-Math.sqrt(p.getX()*p.getX() +p.getY()*p.getY())<=2) {
return isStuck();
}
return <default value>;
}
答案 1 :(得分:1)
您需要使用return
关键字从方法中返回值,如下所示:
public boolean isClose(Particle p) {
if (Math.sqrt(getX()*getX() + getY()*getY())-Math.sqrt(p.getX()*p.getX() +
p.getY()*p.getY())<=2) {
return isStuck();
} else {
return false;//default case
}
}
此外,您的方法isClose()
需要通过从boolean
更改为布尔值(如上所示)来告知它返回void
。