我正在编写一个程序,一旦前一个对象满足布尔变量的条件返回true,就会生成一个新对象。我遇到的问题是我正在使用多种不同的形状。该程序完美运行,直到第二种形状显示。此时它有两个符合布尔值isDone()条件的形状。有一种简单的方法可以将布尔变量返回为false /默认条件吗?
代码:
if (baserectangle.isDone()) {
int meowchoice = (int) Math.round(2 * Math.random());
if (meowchoice < 1) {
baserectangle = (new Rectangle(10, 25, position, m, n));
scene1.add(baserectangle);
}
if (meowchoice >= 1) {
basesquare = (new Square(10, 25, position, m, n));
scene1.add(basesquare);
}}
else if (basesquare.isDone()) {
int meowchoice2 = (int) Math.round(2 * Math.random());
if (meowchoice2 < 1) {
baserectangle = (new Rectangle(10, 25, position, m, n));
scene1.add(baserectangle);
}
if (meowchoice2 >= 1) {
basesquare = (new Square(10, 25, position, m, n));
scene1.add(basesquare);
}
}
即。程序以baserectangle或basesquare开始,然后当该形状满足其isDone条件时,随机生成一个新的baserectangle或basesquare。问题是,一旦存在baserectangle和basesquare,它就会一次连续生成多个形状。
isDone()实现:
public boolean isDone() {
if (this.y < 2) {
return true;
}
if (i > 0 && position [i-1][j] != 0) {
return true;
}
else return false;
}
其中this.y是平面上形状的y坐标,i和j是对象在数组中的位置。
答案 0 :(得分:0)
你可以在你的班级中添加另一个变量,例如alreadyDone
并使用它来决定是否必须生成其他形状,例如:
public boolean isDone() {
if (this.y < 2) {
alreadyDone = true;
return true;
}
if (i > 0 && position [i-1][j] != 0) {
alreadyDone = true;
return true;
}
else return false;
}
在检查期间:
if (!baserectangle.alreadyDone && baserectangle.isDone()) { ...
请记住,这只是一个例子,我确信有更好的方法可以做到这一点
答案 1 :(得分:0)
该程序完美运行,直到显示第二种形状。此时它有两个符合布尔值isDone()条件的形状
当然,你有两种形状。问题可能在于您只检查一个是否使用if-else if
组合。
您可能需要检查 形状是否使用单独的if语句完成。
// Rectangle is done
if (baserectangle.isDone()) {
int meowchoice = (int) Math.round(2 * Math.random());
if (meowchoice < 1) {
baserectangle = (new Rectangle(10, 25, position, m, n));
scene1.add(baserectangle);
}
else if (meowchoice >= 1) {
basesquare = (new Square(10, 25, position, m, n));
scene1.add(basesquare);
}
}
// Square is done
if (basesquare.isDone()) {
int meowchoice2 = (int) Math.round(2 * Math.random());
if (meowchoice2 < 1) {
baserectangle = (new Rectangle(10, 25, position, m, n));
scene1.add(baserectangle);
}
else if (meowchoice2 >= 1) {
basesquare = (new Square(10, 25, position, m, n));
scene1.add(basesquare);
}
}
但是,这两个if语句的内容完全相同,所以你可以这样做
// Rectangle or Square are done
if (baserectangle.isDone() || basesquare.isDone()) {
int meowchoice = (int) Math.round(2 * Math.random());
if (meowchoice < 1) {
baserectangle = (new Rectangle(10, 25, position, m, n));
scene1.add(baserectangle);
}
else if (meowchoice >= 1) {
basesquare = (new Square(10, 25, position, m, n));
scene1.add(basesquare);
}
}
如果你想缩短isDone
方法......
public boolean isDone() {
return (this.y < 2) || (i > 0 && position [i-1][j] != 0);
}