是否可以在条件中声明变量?

时间:2012-08-02 17:18:14

标签: java

这就是我要做一个while循环的方法:

boolean more = true;
while (more)
{
  // do something
  if (someTest()) 
  {
    more = false;
  }
}

这是非常标准的。我很想知道是否有办法在Java中执行类似下面的代码:(我想我在C中看到了类似的东西)

// The code below doesn't compile (obviously)
while (boolean more = true)
{
  // do something
  if (someTest())
  {
    more = false;
  }
}

我只问这个,因为目前我不喜欢我在定义条件中使用的变量的方式(在这种情况下:“更多”)之外的循环范围,甚至虽然它只是在里面循环。在循环结束后,它没有任何意义。


* *更新* *

在参观了Porcaline密室后,我想到了一个想法:

for (boolean more=true; more; more=someTest())
{
  // do something
}

它并不完美;它正在滥用for循环,我想不出一种方法来执行循环至少一次,但它已经接近了...有没有办法确保循环执行1次以上?

3 个答案:

答案 0 :(得分:9)

要按字面意思回答您的问题,您可以

for(boolean more = true; more; ) {
   more = !someTest();
}

但这与

大致相同
while(!someTest());

如果必须至少执行一次

do {

} while(!someTest());

答案 1 :(得分: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);

我认为在循环之外定义你的条件更清楚。

答案 2 :(得分:0)

KidTempo,在你给出的例子中,我认为每次循环都会重新初始化。每次循环时,都会重新计算条件,因此假设您能够在条件中定义变量,每次重新计算条件时,都会重新初始化变量。这也适用于其他类型的条件,所以我想避免在条件中定义变量。