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

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

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

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 = true)是一个赋值而不是一个比较。

试试if (stop == true)

另请参阅Java程序员制作的十大错误 。

实际上,如果你只需要使用一个StringBuffer实例,而不是在每个递归调用中创建一个实例,那么整个方法会更清晰……我会选择:

 private String getWhoozitYs(){ StringBuffer sb = new StringBuffer(); while (generator.nextBoolean()) { sb.append("y"); } return sb.toString(); } 

由于stop是布尔值,您可以将该部分更改为:

 //... if(stop) // Or to: if (stop == true) { sb.append("y"); getWhoozitYs(); } return sb.toString(); //... 

尝试这个:-

 private String getWhoozitYs(){ StringBuffer sb = new StringBuffer(); boolean stop = generator.nextBoolean(); if(stop) { sb.append("y"); getWhoozitYs(); } return sb.toString(); } 

=是作业

 if(stop){ //your code } 

要么

 if(stop == true){ //your code } 

另外你可以写

 if(stop) { sb.append("y"); getWhoozitYs(); } 
 if(stop == true) 

要么

 if(stop) 

=是作业。

==用于检查条件。

 if(stop = true) 

它将指定true以停止并评估if(true)。 因此,如果因为stop总是被赋值为true,它将始终执行内部代码。