如何在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
您可以指定true
来stop
而不是比较。
那么为什么执行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,它将始终执行内部代码。