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

有两个问题:

在构造函数中,您没有设置mand d,而是设置了xand y,它什么都不做。

t此外,在您的 while 循环中,您不会更新 和 的vz。相反,您只是将临时值设置回原始值。

于 2013-08-08T17:38:11.197 回答
1
     public ParticleDropClass (double x, double y){
       x=m;
       y=d;
      }

这是显而易见的问题。这只会使 x 和 y 为 0。可能还有更多。

编辑

正如其他人已经指出的那样,drop中有一个无限循环。

于 2013-08-08T17:35:26.713 回答
1
while ( z>= 0.0)

这就是问题。您的 while 循环永远不会改变变量 z,因此循环永远不会结束,也永远不会到达您的 print 语句。

于 2013-08-08T17:38:31.417 回答
0

看起来你处于无限循环中。您的 z(您将其设置为 h,即 10)始终大于或等于 0.0。你应该使用更好的缩进,因为我很确定你是学生,所以考虑使用更有意义的标识符。

于 2013-08-08T17:38:44.263 回答