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

Kid*_*mpo 6 java

这是我如何做一个while循环:

boolean more = true;
while (more)
{
  // do something
  if (someTest()) 
  {
    more = false;
  }
}
Run Code Online (Sandbox Code Playgroud)

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

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

我只问这个,因为目前我不喜欢我在循环范围之外定义条件中使用的变量(在这种情况下:"more")的方式,即使它只在循环内部相关.循环结束后,它没有任何意义.


**更新**

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

for (boolean more=true; more; more=someTest())
{
  // do something
}
Run Code Online (Sandbox Code Playgroud)

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

Pet*_*rey 9

要按字面意思回答你的问题,你可以做到

for(boolean more = true; more; ) {
   more = !someTest();
}
Run Code Online (Sandbox Code Playgroud)

但这跟大致相同

while(!someTest());
Run Code Online (Sandbox Code Playgroud)

如果它必须至少执行一次就可以执行

do {

} while(!someTest());
Run Code Online (Sandbox Code Playgroud)

  • `for(var; cond;)`技巧在处理迭代器时很有用:`for(Iterator <?> it = list.iterator(); it.hasNext();){/*do stuff*/}`.实际上它建议在*Effective Java Item 45中:最小化局部变量的范围* (2认同)