2014-10-03 4 views
-4

내 exercice에 루프 A 확률값을 가지고 속도가 343m/s의이 초과 할 때 나는 콘솔에 인쇄 할 :나는 속도가 매초마다 업데이트됩니다

펠릭스 depasse 라 비테세 뒤 아들

을 속도가 나는이 작업을 수행 할 수있는 방법 (343)

을 초과하기 전에

은 한 번만 인쇄됩니다?

이 코드를 수행하면 속도가 343을 초과 할 때마다 인쇄됩니다. 한 번만 인쇄하려면 어떻게해야합니까?

import java.util.Scanner; 

class Parachutiste { 

    private static Scanner clavier = new Scanner(System.in); 

    public static void main(String[] args) { 

     double masse = 80.0; 
     do { 
      System.out.print("masse du parachutiste (>= 40) ? "); 
      masse = clavier.nextDouble(); 
     } while (masse < 40.0); 

     double h0 = 39000.0; 
     do { 
      System.out.print("hauteur de depart du parachutiste (>= 250) ? "); 
      h0 = clavier.nextInt(); 
     } while (h0 < 250.0); 


    double g=9.81; 
    double v0=0; 
    double t0=0; 
    double vitesse=v0; 
    double hauteur=h0; 
    double accel=g; 
    double t=t0; 
    double surface=2; 
    double q; 

    do{ 

    if(vitesse>343){ 


     System.out.println("## Felix depasse la vitesse du son"); 

    } 
     double sm=surface/masse; 
     q=Math.exp((-sm*(t-t0))); 
    vitesse=(g/sm)*(1-q)+(v0*q); 
    hauteur = h0-((g/sm)*(t-t0))-((v0-(g/sm))/sm)*(1-q); 
    accel=g-(sm*vitesse); 
    if(hauteur>0){ 
      // Utilisez cette ligne pour l'affichage 
      System.out.format("%.0f, %.4f, %.4f, %.5f\n", 
           t, hauteur, vitesse, accel);} 
      t++; 
    } 
    while(hauteur>0); 
    } 
} 
+0

vitesse가 343을 초과하면 'vitesse' 계산을 계속 하시겠습니까? 그렇지 않다면 println 문 다음에 간단한'break;'를 넣으십시오. 그렇지 않으면 부울 조건을 사용하여 이미 메시지를 인쇄했는지 확인하십시오. – m4rtin

+0

휴식 시간을 추가 할 때 for 루프도 빠져있을 것이며 부울을 추가하면 작동하지 않습니다. – Salma

+0

코드에 for 루프가없고 부울 솔루션이 다른 두 SO 멤버가 제공 한 것입니다 , 나는 그것이 일해야한다고 생각한다. – m4rtin

답변

0

이렇게하면됩니다.

선언이 루프 외부 : 다음

boolean isPrinted = false; 

귀하의 경우 루프이 스왑 :

if(!isPrinted) 
    if(vitesse>343) { 
     isPrinted = true; 
     System.out.println("## Felix depasse la vitesse du son"); 
    } 
} 
+0

이 코드를 추가 할 때마다 "## Felix depasse la vitesse du son"속도> 343의 속도로 게시됩니다. – Salma

+0

원본 if 루프를 제거하고 제공된 블록으로 교체 했습니까? – user2272115

+0

예 ... do while 루프 때문에 시간이 초과되고 작성한 if 루프가 매초마다 반복됩니까? – Salma

0

@Salma 방금 부울 변수를 생성하고 실제와 인스턴스를 수행 할 수 있습니다 값을 추가 조건으로 설정하면 (vitesse> 343) false로 재설정 한 다음 다른 입력 값에 대해 한 번만 표시합니다. 이와 같이

at variable declaration section 

boolean bool_once =True 

if(vitesse>343 & bool_once){// and condition 
    ..... 
    ..... 
bool_once = False // reset the value 
+0

작동하지 않습니다. / – Salma