2017-11-28 4 views
-4

私はドットレースプログラムを作成しており、特定の条件を使用してforループをwhileループに変更する手助けが必要です。これらの条件は、ドットのx座標とウィンドウの幅です。どんな幅のウィンドウを作るかにかかわらず、プログラムはドットが終わったときを知っています。特定の条件(ドット位置、ウィンドウ幅)を使用してforループをwhileループに変更するにはどうすればよいですか?

createWindows(); 
       // rise in steps of 10 pixels, cruise in steps of 5 pixels 
     final int hStep = 28; 
     final int vStep = 0; 

     Dot connectMe = new Dot(100, 270, 70, Color.yellow, dotCourse); 
     for(int i=0; i<20; i++) 
     { 
      connectMe.moveDot(connectMe.getX(), connectMe.getY()-vStep); // Move up by vStep 
      Thread.sleep(1); 
     } 
     for(int i=0; i<30;i++) 
     { 
      connectMe.moveDot(connectMe.getX() + hStep, connectMe.getY()); // Move right by hStep 
      Thread.sleep(200); 

     boolean finish = (GWINDOW_WIDTH-60) <= connectMe.getX(); 
      if (finish) { 
     } 
      System.out.println("Did the dot finish? : " + finish); 
     } 

} 
+0

'int i = 0; while(i <20){ //他のもの i ++; } ' – XtremeBaumer

+1

あなたは何を試しましたか? 'while'ループを作る方法を知っていますか?ヒント: 'for'ループがこれを行うとき、' for(X; Y; ​​Z){} 'と等価な' while'ループはこれです: 'X;一方、(Y){Z; } ' – David

+0

これは非常に簡単です。自然言語アルゴリズムは次のとおりです。「ウィンドウの幅がドットのx位置よりも大きい場合は、ドットを1ステップ移動します。」今度は、この正確なアルゴリズムをJava構文で書いています。 whileループの記述方法がわからない場合は、[Oracleチュートリアル](https://docs.oracle.com/javase/tutorial/java/nutsandbolts/while.html)を参照してください。あなたの実装に問題がある場合は、それを掲示し、さらに助けを求める。 –

答えて

0

While Loop in Java

ブール式が真と評価しながら、whileループは、コードのブロックを実行する:ここ

コードです。式がfalseと評価されるとすぐに終了します。ブール式は各反復の前に評価されます。ブール式は、各反復の前に評価されるので構文

while(booleanExpression) { 
    //block of code to be executed 
} 

ノート

は、コードのブロックはbooleanExpressionが真と評価された場合にのみ実行されます。コードブロックを少なくとも1回実行するための保証が必要な場合は、do-whileループを使用します。

booleanExpressionは、真または偽の結果を出力します。比較演算子(==、>、=、< =、!=)を使用して作成されます。

括弧内に複数のブール式を指定することもできます(booleanExpression)。ブール式は論理演算子(& &、||、!)で接続されています。あなたは、このようなあなたのドットのx座標をチェックしたいと思うので、あなたが壁になっドットとwhileループから分割するしたいと思うものを決定したいあなたのシナリオでは

int x = 0; 
while(x < 10) { 
    System.out.println(x); //prints x until x < 10 evaluates to false 
    x++; 
} 

あなたの壁のx値に対して

+0

私は入力しようとしました - int i = 0; \t \t \tながら(私は30 <)\t \t \t {connectMe.moveDot(connectMe.getX()+ hStep、connectMe.getY())。 // hstepで右に移動します Thread.sleep(200); i ++;ウィンドウの幅を変更するたびに、ドットが短くなるか、あまり先に進んでしまいます。 – V4k4

0

間違いなく、あなたは常にドットを同じ量(30(ループ)x 28(ピクセル))移動させます。ウィンドウがどのくらい広がっているかにかかわらず、各ステップでは常に860ピクセル移動します。

したがって、ステップ幅や歩数を調整する必要があります。幅を変えると速度が変わるので、それはおそらくあなたが望むものではありません。代わりに、ドットが到達するまで、より多くのステップまたはより少ないステップを取らなければなりません。コメントで述べたように、自然言語アルゴリズムはjavaと正確に変換されます。

/* As long as   */ while (
/* the window width  */ GWINDOW_WIDTH-60 
/* is larger than  */ > 
/* the dot's x position */ connectMe.getX()) { 
/* move the dot   */  connectMe.moveDot(connectMe.getX() + hStep, connectMe.getY()); 
/* one step.   */  Thread.sleep(200); 
/*      */ } 
関連する問題