2017-04-09 97 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);