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语句中使用随机确定的布尔值。
答案 0 :(得分:21)
if(stop = true)
应该是if(stop == true)
,或者只是(更好!)if(stop)
。
这实际上是一个很好的机会,可以看到为什么总是使用if(something)
,如果你想查看它是true
而不是写if(something == true)
(糟糕的风格!)。
通过执行stop = true
,您将true
分配给stop
而不是进行比较。
那么为什么执行if
语句下面的代码?
请参阅JLS - 15.26. Assignment Operators:
在运行时,赋值表达式的结果是值 分配发生后的变量。一个结果 赋值表达式本身不是变量。
因为你写了stop = true
,那么你就满足了if
条件。
答案 1 :(得分:4)
答案 2 :(得分:3)
实际上,如果你只需要使用一个StringBuffer实例,而不是在每个递归调用中创建一个实例,那么整个方法会更清晰......我会选择:
private String getWhoozitYs(){
StringBuffer sb = new StringBuffer();
while (generator.nextBoolean()) {
sb.append("y");
}
return sb.toString();
}
答案 3 :(得分:1)
由于stop
是布尔值,您可以将该部分更改为:
//...
if(stop) // Or to: if (stop == true)
{
sb.append("y");
getWhoozitYs();
}
return sb.toString();
//...
答案 4 :(得分:1)
if(stop == true)
或
if(stop)
=是作业。
==用于检查条件。
if(stop = true)
它将指定true以停止并评估if(true)。因此,如果因为stop总是被赋值为true,它将始终执行内部代码。
答案 5 :(得分:1)
试试这个: -
private String getWhoozitYs(){
StringBuffer sb = new StringBuffer();
boolean stop = generator.nextBoolean();
if(stop)
{
sb.append("y");
getWhoozitYs();
}
return sb.toString();
}
答案 6 :(得分:1)
=用于作业
写
if(stop){
//your code
}
或
if(stop == true){
//your code
}
答案 7 :(得分:1)
另外你可以写
if(stop)
{
sb.append("y");
getWhoozitYs();
}