在while循环的表达式中,是否可以初始化变量,然后将其用作表达式的一部分?
代码可能更简单:
while (int a = someMethod(), a<b)
可以添加另一种方法,因此必须遵循:
private boolean whileLoopTest() {
int a = someMethod();
return a<b;
}
public void originalMethod() {
while (whileLoopTest()) {
//...
但这看起来并不整洁。
修改的 我也不想直接将方法与我的变量进行比较,因为它与几个变量进行比较,因此如果是一个漫长的,难以理解的混乱。我想要的更好的例子是:
while (int a = SomeClass.someStaticMethod(), -1<a && a<b)
在我的情况下并非如此,但如果someStaticMethod()
需要很长时间才能返回,这将是一个同样有效的问题 - 我只想称之为一次。
我是StackOverflow的新手,所以我不确定是否给出了适用的其他情况是我应该做的。
答案 0 :(得分:2)
int a;
while((a = someMethod()) < b){
//do something
}
常见的用法是从文件中读取:
BufferedReader fileIn = ...
String line;
while((line = fileIn.readLine()) != null){
//do something
}
fileIn.close();
/编辑
您可以为新场景执行此操作:
int a;
while(-1 < (a = SomeClass.staticMethod()) && a < b) {
//do something
}
执行&&
语句的左手部分后,SomeClass.staticMethod()
的返回值将存储在a
中,该值将继承语句的右侧部分。< / p>
答案 1 :(得分:0)
您可以直接使用该函数,而无需使用如下的局部变量:
while ( someMethod() < b) { /* ... */}
这是,如果您的方法返回预期值。 (如果你将它转换为局部变量,它应该是)
编辑:第二个问题。 您的关注是可以理解的,但如果您将该方法值分配给局部变量 in while循环的布尔表达式,则在每个循环中“While”检查表达式时,您将方法的返回值分配给本地变量,表示您在每次迭代中调用该方法。这不会改变我的第一个答案。
答案 2 :(得分:0)
为什么不不将值分配给“a”如果你还没有使用它? while(someMethod()&lt; b){doSomething()} 如果您确实需要“a”,那么您的替代解决方案将无效。然后解决方案是保存它(我不认为不可能)或Kerrek说的。