如何在 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 语句中使用这个布尔值?的主要内容,如果未能解决你的问题,请参考以下文章