如何在if语句中使用此布尔值?

use*_*920 10 java if-statement boolean

private String getWhoozitYs(){
    StringBuffer sb = new StringBuffer();
    boolean stop = generator.nextBoolean();
    if(stop = true)
    {
        sb.append("y");
        getWhoozitYs();
    }
    return sb.toString();
}
Run Code Online (Sandbox Code Playgroud)

这是我在编程课程中所做项目的一大块代码.我遇到的问题是,在声明布尔停止并尝试为其分配随机生成的布尔值之后,我不能在if语句中使用它来确定是否应该向StringBuffer添加更多y.我在构造函数中有Random生成器,因此该部分不是问题.我假设因为我在if语句之外声明了布尔值,我可以在里面使用它,但似乎并非如此.真正的问题是如何在if语句中使用随机确定的布尔值.

Mar*_*oun 22

if(stop = true)应该是if(stop == true),或简单(更好!)if(stop).

这实际上是一个很好的机会,可以看到为什么总是使用,if(something)如果你想看看它是否true而不是写if(something == true)(坏风格!).

通过这样做stop = true,那么你分配truestop不比较.

那么为什么if声明下面的代码会执行呢?

JLS - 15.26.分配运营商:

在运行时,赋值表达式的结果是赋值发生后变量的值.赋值表达式的结果本身不是变量.

因为你写了stop = true,那你就满足了if条件.

  • 实际上,它应该只是`if(stop)`.由于拼写错误,这甚至不会被误解.:P (4认同)

Ave*_*oes 5

这里的问题是

if(stop = true)是赋值而不是比较。

尝试if (stop == true)

另请查看Java 程序员常犯的十大错误