Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 可以在条件中声明变量吗?_Java - Fatal编程技术网

Java 可以在条件中声明变量吗?

Java 可以在条件中声明变量吗?,java,Java,这是我将如何执行while循环: boolean more = true; while (more) { // do something if (someTest()) { more = false; } } 这很标准。我很想知道是否有一种方法可以在Java中执行类似于下面的代码:(我想我在C中见过类似的东西) 我之所以问这个问题,是因为目前我不喜欢在循环范围之外定义条件中使用的变量(在本例中为“more”),即使它只与循环内部相关。在循环完成后,将其挂起是没有意义的

这是我将如何执行while循环:

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){…}
[颤抖]