-1

x=11座標に当たるまで動くブロックで何かを作っています。while ループ内で while ループを実行してみました:

public void run() {
    x = 200;
    y = 200;
    while (true) {
        if (left == true) {
            x -= 5;
            while (true) {
                if (x == 11) {
                    left = false;
                }
            }

        }
        if (up == true) {
            y -= 5;
        }
        if (right == true) {
            x += 5;
        }
        if (down == true) {
            y += 5;
        }
        repaint();
        try {
            Thread.sleep(20);
        }
        catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

ただし、x = 11 で停止するわけではなく、無限に実行され続けます。他にこれを行う方法を知っている人はいますか?

4

3 に答える 3

1

ブロックが x = 11 を下回らないようにしたいようです。その場合は、次のことを試してください。

    if (left == true) {
        if(x - 5 < 11){
            x = 11;
        }
        else{
            x -= 5;
        }
    }
于 2013-06-30T15:05:46.983 に答える
1

を含む任意のプログラム

while(true){
     //any code that coesn't contain break
}

永遠に走り続ける

ループを一周するたびに、ループ内のコードを実行しwhile(true)、条件がまだ true の場合は行に戻ります (true再び戻るので、明らかにそうなります。

これらの種類のループには (時折) 正当な使用法がありますがbreak;、それらを終了するにはループ内のどこかに含まれている必要があります。

あなたの場合、両方のループにこの問題がありますが、内側のループは実際にスタックするループです

  while (true) {
     if (x == 11) {
         left = false;
     }
  }

それを踏む:

  1. true==true --> はい、ループに入ります
  2. x == 11 ですか --> そうです。
  3. 左に false を設定します。
  4. true==true --> はい、ループに入ります
  5. x == 11 ですか --> そうです。
  6. 左に false を設定します。
  7. true==true --> はい、ループに入ります

そしてぐるぐるとまたぐるぐる

11を下回らない限り、何かを(5ずつ)下に移動したいと述べました。以下はこれを達成します

while (x>11){
    x-=5;
    if (x<11){
       x==11;
    }
}

これはやや非効率的ですが、より複雑な問題を単純化したものだと思います

于 2013-06-30T14:57:57.433 に答える
0

試す

    boolean isValid=false;

    while(!isValid){
      if(left==true)
       {
        x -= 5;
          if(x ==11)
           {
            left=false;
            isValid=true;
           }
       }
   }

この場合、あなたの条件を知らずに

于 2013-06-30T15:10:38.977 に答える