初始化while表达式中的变量 - 而不是语句

时间:2012-01-14 00:13:26

标签: java if-statement

在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的新手,所以我不确定是否给出了适用的其他情况是我应该做的。

3 个答案:

答案 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说的。