重置Java中的布尔变量

时间:2016-05-03 22:08:25

标签: java

我正在编写一个程序,一旦前一个对象满足布尔变量的条件返回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是对象在数组中的位置。

2 个答案:

答案 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);
}