2012-01-14 5 views
1

whileループの式では、変数を初期化してからそれを式の一部として使用できますか?while式の変数を初期化する - ステートメントではない

それはおそらく、コードで簡単です:ちょうど、以下に別のメソッドを追加し、そう持っていることが可能であろう

while (int a = someMethod(), a<b) 

private boolean whileLoopTest() { 
    int a = someMethod(); 
    return a<b; 
} 

public void originalMethod() { 
    while (whileLoopTest()) { 
     //... 

が、これはニートいないようです。

私もそれはいくつかの変数と比較されて、そして限り、読めなく混乱になる場合は、直接、私の変数にする方法を比較したくない EDIT。私が何をしたいのより良い例は次のようになります。

while (int a = SomeClass.someStaticMethod(), -1<a && a<b) 

それは私の場合には真実ではないですが、someStaticMethod()を返すために長い時間がかかった場合、これは等しく有効疑問だろう - 私は一度だけ、それを呼び出すようにしたいと思います。 私はStackOverflowをかなり新しくしているので、これが適用される他の状況を与えるのが私のやり方であるかどうかはわかりません。

+1

for(int a = someMethod(); a

+0

あなたがしている場合: while(a

+1

@KerrekSB 'someMethod()'が最初に 'b'より小さい値を返した場合(ForUpadate式がないため)、無限にループします。 'for(int a = someMethod(); a Jeffrey

答えて

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に格納され、右側の値はそしてその声明の一部。

0

あなたは、このようなローカル変数を使用せずに、直接機能を使用することができます。

while (someMethod() < b) { /* ... */} 

これ、あなたのメソッドの戻り値を意図している場合。 (ローカル変数にキャストしている場合は、それが想定されています)

EDIT:2番目の質問です。 あなたの懸念は理解できるが、ループのブール式ながらあなたがチェック式は、ローカル変数にメソッドの戻り値を代入している「ながら」、その手段ごとにループで、内のローカル変数にそのメソッドの値を代入している場合すべての反復でそのメソッドを呼び出すことになります。それは私の最初の答えから何も変わらない。

+0

私は実際にこのメソッドの値を使用するブール式をいくつか持っていますので、一度だけ評価したかったのです。私は私の質問を更新するでしょう、私はこれが私の質問にansserであることに気付かなかった! – DenverCoder8

+0

私は自分の答えを更新しました。 – Tanshaydar

0

なぜならではないあなたはそれを使用していない場合に値を割り当てますか? while(someMethod()< b){doSomething()} 実際に "a"が必要な場合は、代替ソリューションが機能しません。その解決策は、それを保存するか(私がunneatとは思わない)か、Kerrekが言ったことです。

関連する問題