2017-04-09 168 views
0

我想在我的循環中只有在超過聲速之後纔打印一條消息。
我在以下主題上找到了某人解釋如何用布爾值來實現它,但我沒有得到它。 這是我已經試過:做while循環:在循環內執行一次

boolean oneTime = (vitesse > 343) 
if (oneTime) 
    System.out.println("Felix depasse la vitesse du son"); 

而且我的代碼

while (h > 0) 
{ 
    while (speed < 343 && accel>0.5) 
    { 
     double s = surface/ masse; 
     double q = Math.exp(-s*(t-t0)); 
     vitesse = (g/s)*(1-q) + v0*q; 
     hauteur = h0 - (g/s)*(t-t0)-((v0-(g/s))/s)*(1-q); 
     accel = g-s*vitesse; //formula to compute the fall of a body 

     if (h > 0) 
     { 
      if (speed > 343) 
      { 
       System.out.println("## Felix depasse la vitesse du son"); 
       System.out.printf("%.0f, %.4f, %.4f, %.5f\n",t, hauteur, vitesse, accel); 
      } 
      else if (accel <0.5) 
      { 
       System.out.println("## Felix depasse la vitesse du son"); 
       System.out.printf("%.0f, %.4f, %.4f, %.5f\n",t, hauteur, vitesse, accel); 
      } 
      else 
       System.out.printf("%.0f, %.4f, %.4f, %.5f\n",t, hauteur, vitesse, accel); 
     } 
     ++t; 
    } 
} 

execute an instruction only one time in a do while loop in java

+0

只需添加一個'break'當你需要退出你的循環。而且你有兩個while循環,而不是在解決這個問題時做任何事情 –

回答

1

如果您希望循環繼續,但停止後的第一次印刷的消息,你想要的東西像這樣的結構(僞代碼):

boolean oneTime = false; 
while (...) { 
    ... 
    if (<some test for printing>) { 
     if (!oneTime) { 
      oneTime = true; 
      <print your message> 
     } 
    } 
    ... 
    if (<some other test for printing>) { 
     if (!oneTime) { 
      oneTime = true; 
      <print your message> 
     } 
    } 
    ... 
} 

如果你當打印消息時希望退出循環,將!firstTime添加到while循環條件中(如果您希望當前循環迭代完成)或使用break立即結束循環。如果你使用break,那麼你完全不需要oneTime標誌。要跳出嵌套的while循環,請參閱this thread

0

在第一個循環前有一個用false初始化的布爾值,並在打印出felix消息時將其設置爲true。評估布爾值並僅在滿足條件且布爾值仍然爲假時纔打印felix消息。你可以調用布爾oneTime。

if (speed > 343 && !oneTime) { 
    oneTime = true; 
    System.out.println("## Felix depasse la vitesse du son"); 
} else if (accel < 0.5 && !oneTime) { 
    oneTime = true; 
    System.out.println("## Felix depasse la vitesse du son"); 
} 
System.out.printf("%.0f, %.4f, %.4f, %.5f\n",t, hauteur, vitesse, accel); 
0

我注意到你的第二個循環與而開始(速度 &加速度> 0.5),說,這是永遠不會實現真正的if語句,因爲它是永遠不會達到343 如果(速度> 343)總是將假,如果你希望它至少運行一次,你可以使用

do{ 
    ... 
    ... 
    } while(speed < 343 && accel>0.5);