Java 可以在条件中声明变量吗?
这是我将如何执行while循环:Java 可以在条件中声明变量吗?,java,Java,这是我将如何执行while循环: boolean more = true; while (more) { // do something if (someTest()) { more = false; } } 这很标准。我很想知道是否有一种方法可以在Java中执行类似于下面的代码:(我想我在C中见过类似的东西) 我之所以问这个问题,是因为目前我不喜欢在循环范围之外定义条件中使用的变量(在本例中为“more”),即使它只与循环内部相关。在循环完成后,将其挂起是没有意义的
boolean more = true;
while (more)
{
// do something
if (someTest())
{
more = false;
}
}
这很标准。我很想知道是否有一种方法可以在Java中执行类似于下面的代码:(我想我在C中见过类似的东西)
我之所以问这个问题,是因为目前我不喜欢在循环范围之外定义条件中使用的变量(在本例中为“more”),即使它只与循环内部相关。在循环完成后,将其挂起是没有意义的
**更新** 在参观了Porcaline密室后,我产生了一个想法:
for (boolean more=true; more; more=someTest())
{
// do something
}
它并不完美;它滥用了for循环,我想不出一种方法来至少执行一次循环,但它很接近。。。是否有办法确保循环执行1次以上?对于您的特定情况,您可以将代码简化为:
while (true) {
if (someTest()) {
break;
}
}
通常,您可以将外部范围声明替换为内部范围声明,但需要移动循环条件:
while (true) {
boolean more=true;
...
if (someTest()) {
more = false;
}
...
if (!more) {
break;
}
}
甚至:
do {
boolean more=true;
...
if (someTest()) {
more = false;
}
...
if (!more) {
break;
}
} while (true);
我认为在循环之外定义你的条件更清晰。KidTempo,在你给出的例子中,我认为每次通过循环都会有更多的条件被重新初始化。每次通过循环时,都会重新计算该条件,因此假设您能够在条件中定义变量,则每次重新计算该条件时都会重新初始化该变量。这也适用于其他类型的条件句,所以我要说的是避免在条件句中定义变量。要逐字回答您的问题,您可以这样做
for(boolean more = true; more; ) {
more = !someTest();
}
do {
} while(!someTest());
但这与
while(!someTest());
如果它必须至少执行一次,您可以这样做
for(boolean more = true; more; ) {
more = !someTest();
}
do {
} while(!someTest());
对于(布尔值more=true;more;more=someTest())。。。将始终至少执行一次。
for(var;cond;)
技巧在处理迭代器时非常有用:for(迭代器it=list.Iterator();it.hasNext();){/*do stuff*/}
。事实上,在有效的Java项目45:最小化局部变量的范围中建议这样做。在我提交更新时,我们的答案突然出现了。谢谢对我来说,将条件抽象为一个方法可能是个坏主意——循环中只有三行,其中一行设置了“more”,因此将其封装在一个方法中就太过分了。我原以为这会使问题更简洁,但却让它容易被误解。我的坏习惯。老实说,我不太喜欢使用,而(真的){…}
似乎有点逃避现实。另外,我仍然做着调试别人的意大利面代码的噩梦,上面堆满了大块的if(false){…}
[颤抖]