0

「ParticleDropClass」という「メイン」クラスを作成する必要があります。このクラスの目的は、粘性液体を含む容器の底に巨大な物体が落下するのにかかる時間の計算を含めることです。

public class ParticleDropClass {
    double m;
    double d;
    double z;
    double t;
    double v;

    public ParticleDropClass (double x, double y){x=m;y=d;} // creating a constructor 

    public  final double g= 9.81 ;//constants
    public final double  h = 10.0;//constants

    public void drop(double dt ){
        t=0;v=0;
        double  z=h;// intial height at 10m
        while ( z>= 0.0){
            double  a= (d*v*v)/m-g;// formula for body's acceleration
            double dv= a*dt;
            double dz=v*dt ;
            double z1= z+dz;
            double v1= v+dv;
            double t1=t+dt;
            t1=t;
            v1=v;
            z1=z;
        }

        System.out.println("t ="+t +"dt="+t+"s"+ "\n"+"final v="+v+"m/s" );
    }

    public static void main(String[] args) {
        double m=4.3;double d=2.5 ;
        ParticleDropClass b= new ParticleDropClass(m,d);// for an object of               mass 4.3 and 2.5 , at height 0.5 I create a object .
        b.drop(0.5);
    }
}

しかし、上記のコードを実行しても何も起こりません。なぜですか?

4

5 に答える 5

2

dropの値が変化しないため、無限ループが発生しzます。ちなみに、インデントと改行を修正することをお勧めします。Eclipse などの IDE を使用して簡単に修正できます。

私はあなたが書くつもりだったと思います:

z = z1;
t = t1;
v = v1;

そして、コンストラクターで:

m = x;
d = y;

左オペランドは、右オペランドの値を取得します。

于 2013-08-08T17:38:36.230 に答える
1
     public ParticleDropClass (double x, double y){
       x=m;
       y=d;
      }

これは明らかな問題です。これは x と y を 0 にするだけです。もっとあるかもしれません。

編集

他の人がすでに指摘しているように、ドロップには無限ループがあります。

于 2013-08-08T17:35:26.713 に答える
1

2 つの問題があります。

コンストラクターでは、 and を設定していません。代わりに、mandを設定していますが、何もしません。dxy

また、while ループではtvとの値を更新していませんz。代わりに、一時的な値を元に戻すだけです。

于 2013-08-08T17:38:11.197 に答える
1
while ( z>= 0.0)

これが問題です。while ループが変数 z を変更することはないため、ループが終了せず、print ステートメントに到達することもありません。

于 2013-08-08T17:38:31.417 に答える
0

無限ループに陥っているようです。z (10 である h に設定している) は常に 0.0 以上です。より良いインデントを使用する必要があります。あなたが学生であると確信しているので、より意味のある識別子を使用することを検討してください。

于 2013-08-08T17:38:44.263 に答える