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

Posted

技术标签:

【中文标题】如何在 if 语句中使用这个布尔值?【英文标题】:How to use this boolean in an if statement? 【发布时间】:2013-03-03 00:15:29 【问题描述】:
private String getWhoozitYs()
    StringBuffer sb = new StringBuffer();
    boolean stop = generator.nextBoolean();
    if(stop = true)
    
        sb.append("y");
        getWhoozitYs();
    
    return sb.toString();

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

【问题讨论】:

嘿,我想你可能会想出这个,这是一个很好的谜题.. 查找演员表。尤其是0和1 另外,你可以简单地说if(stop)看这个-***.com/questions/3793650/… 【参考方案1】:

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 条件。

【讨论】:

其实应该是if (stop)。由于拼写错误,这甚至不会被误解。 :P if 仍在比较中,只是因为 stop 设置为 true,所以它总是评估为 true。抱歉,这是一个挑剔的东西,但似乎值得解释(因为 OP 是初学者)。 一个疑问...if(stop)if(stop == true) 第二个需要额外的 CPU 周期来执行。以编程方式两者解释相同,那为什么不好使用? @unknown 两者之间没有复杂性差异。这就像问“变量是否为真”而不是“变量是否为真”。 @MarounMaroun 是的,但在 cpu 指令级别我怀疑是这种情况。因为“变量是否为真”我认为有两个条件。你有什么文件或东西吗?【参考方案2】:

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

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

     return sb.toString();

【讨论】:

【参考方案3】:
if(stop == true)

if(stop)

= 用于赋值。

== 用于检查条件。

if(stop = true) 

它将为停止分配 true 并评估 if(true)。所以它总是会执行 if 里面的代码,因为 stop 总是会被赋值为 true。

【讨论】:

【参考方案4】:

另外你可以写

if(stop)

        sb.append("y");
        getWhoozitYs();

【讨论】:

【参考方案5】:

= 用于赋值

if(stop)
   //your code

if(stop == true)
   //your code

【讨论】:

【参考方案6】:

试试这个:-

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

【讨论】:

【参考方案7】:

这里的问题是

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

试试if (stop == true)

还可以查看Top Ten Errors Java Programmers Make。

【讨论】:

【参考方案8】:

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

//...
if(stop) // Or to: if (stop == true)

   sb.append("y");
   getWhoozitYs();

return sb.toString();
//...

【讨论】:

以上是关于如何在 if 语句中使用这个布尔值?的主要内容,如果未能解决你的问题,请参考以下文章

为啥这个 if 语句以非布尔值成功?

使用布尔值的 If 语句的语法

关于java中的if语句

如何在 Bash 中使用布尔值编写 if/else? [复制]

布尔值不适用于 If 语句(Javascript)

如何启用我的 html 页面以使用两个布尔字段值检查用户并使用“if”语句显示他们的数据?