【问题标题】:How to use this boolean in an if statement?如何在 if 语句中使用这个布尔值?
【发布时间】: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 语句中使用随机确定的布尔值。

【问题讨论】:

标签: java if-statement boolean


【解决方案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();
              //...
              

              【讨论】:

                猜你喜欢
                • 2018-04-17
                • 1970-01-01
                • 1970-01-01
                • 2020-07-30
                • 2013-05-06
                • 2013-11-22
                • 1970-01-01
                相关资源
                最近更新 更多