如何在满足条件之前打印一条线

时间:2016-09-25 12:55:05

标签: java

这可能非常简单,但我无法找到它......

我正在编写一个计算跳伞运动员跌倒参数的程序,并逐秒显示结果(高度,速度和加速度)直到他到达地面。

在某一时刻(当海拔高度小于2500米时),他将打开降落伞。程序应该打印(只有一次)" ## Felix打开他的降落伞"就在他达到2500米之前。

所以结果是: (时间,高度,速度,加速度) 131,2698.0264,377.5607,0.37098 " ## Felix打开他的降落伞" 132,2320.2818,377.9270,0.36182 133,1991.2751,284.9225,-79.22827 ......

但我无法找到办法。我的程序在满足条件后打印行: (时间,高度,速度,加速度) 131,2698.0264,377.5607,0.37098 132,2320.2818,377.9270,0.36182 " ## Felix打开他的降落伞" 133,1991.2751,284.9225,-79.22827 ..

以下是代码:

import java.util.Scanner;

类Parachutiste {

public static void main(String[] args) {

    Scanner clavier = new Scanner(System.in);

    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.nextDouble();
    } while (h0 < 250.0);

    /*******************************************
     * Completez le programme a partir d'ici.
     *******************************************/
    final double g = 9.81; 
    double v0 = 0;
    double t0 = 0;

    double sourface = 2.00;
    double vitesse = v0;
    double hauteur = h0; 
    double accel = g; 
    double t = t0;

    boolean printed = false;


    System.out.printf("%.0f, %.4f, %.4f, %.5f\n", t, hauteur, vitesse, accel); 




   while (hauteur > 0) {
        ++t;
        double s = sourface / 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;

        if (hauteur > 0) {

            System.out.printf("%.0f, %.4f, %.4f, %.5f\n", t, hauteur, vitesse, accel);



            if (hauteur < 2500) {
            sourface = 25.0; 
            t0 = t;
            v0 = vitesse; 
            h0 = hauteur;   
            }

            **if ((hauteur <= 2500) && (printed == false))  {
            System.out.println("## Felix ouvre son parachute");
            printed = true;** 
            } 

       } 
    }  

    /*******************************************
     * Ne rien modifier apres cette ligne.
     *******************************************/
    clavier.close();
}

}

1 个答案:

答案 0 :(得分:0)

为什么不在打印当前高度的代码之前移动打印“Felix打开降落伞”行的条件?

while (hauteur > 0) {
    ++t;
    double s = sourface / 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;

    if (hauteur > 0) {

        if (hauteur < 2500) {
            sourface = 25.0; 
            t0 = t;
            v0 = vitesse; 
            h0 = hauteur;   
        }

        if ((hauteur <= 2500) && !printed)  {
            System.out.println("## Felix ouvre son parachute");
            printed = true;
        } 

        System.out.printf("%.0f, %.4f, %.4f, %.5f\n", t, hauteur, vitesse, accel);

   } 
}