Java 我的练习中有一个循环a问题

Java 我的练习中有一个循环a问题,java,Java,速度每秒更新一次,当速度超过343 m/s时,我想在控制台上打印以下内容: 费利克斯·德帕斯·拉维特斯·杜森 在速度超过343之前,仅打印一次 我该怎么做 当我做这个代码时,它将在每次速度超过343时打印;我能做什么条件使它只打印一次 import java.util.Scanner; class Parachutiste { private static Scanner clavier = new Scanner(System.in); public static voi

速度每秒更新一次,当速度超过343 m/s时,我想在控制台上打印以下内容:

费利克斯·德帕斯·拉维特斯·杜森

在速度超过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);
    }
}
这应该行得通

在循环外声明此项:

boolean isPrinted = false;
然后将其替换为if循环:

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

@Salma您可以这样做,只需创建一个布尔变量,并用真值实例化它,然后在ifvitesse>343侧将其设置为额外条件,并将其重置为假,然后对于不同的输入值,它将只显示一次。像这样

at variable declaration  section

boolean bool_once =True

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

如果vitesse超过343,是否要继续vitesse计算?如果没有,就简单地休息一下;在你的println声明之后。否则,使用布尔条件查找是否已打印消息。当我添加break时,我也将退出for循环,当我添加boolean时,它不起作用代码中没有for循环,布尔解决方案是由其他两个SO成员提供的,我认为它应该可以工作。很抱歉,我将退出do while loop当我添加此代码时,它不工作,每次velocity>343时都会发布Felix depasse la vitesse du son。您是否删除了原始的if循环并用我提供的块替换它?是的。。。这可能是因为do while循环的时间超过了,并且您编写的if循环每秒重复一次?请确保您在主while循环之外声明了布尔值,以便不会再次将其设置为false。