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

时间:2013-03-14 15:03:04

标签: 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();
}

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

8 个答案:

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

这里的问题是

如果(stop = true)是分配而不是比较。

尝试if (stop == true)

另请查看Top Ten Errors Java Programmers Make

答案 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();
}
相关问题