6

これは私が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;
  }
}

ループ内でのみ関連しているにもかかわらず、現在、条件(この場合は「more」)で使用される変数をループのスコープで定義する方法が気に入らないため、これを尋ねるだけです。ループが終了した後、それがぶら下がっているままにしておく意味はありません。


* * アップデート * *

ポーカリン秘密の部屋を訪れた後、私は次のようなアイデアを思いつきました。

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

完璧ではありません。forループを悪用していて、ループを少なくとも1回実行する方法は考えられませんが、近いです...ループが1回以上実行されるようにする方法はありますか?

4

3 に答える 3

9

あなたの質問に文字通り答えるために、あなたはすることができます

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

しかし、これはほとんど同じです

while(!someTest());

少なくとも1回は実行する必要がある場合

do {

} while(!someTest());
于 2012-08-02T17:36:12.337 に答える
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);

ループの外側で条件を定義する方が明確だと思います。

于 2012-08-02T17:32:38.733 に答える
0

KidTempo、あなたが与えた例では、ループを通過するたびに、より多くが再初期化されると思います。ループを通過するたびに、条件が再評価されるため、条件で変数を定義できると仮定すると、条件が再評価されるたびに変数が再初期化されます。これは他のタイプの条件にも当てはまるので、条件で変数を定義することは避けたいと思います。

于 2012-08-02T17:36:04.207 に答える