Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何用while循环中另一个变量的值替换变量的值_Java - Fatal编程技术网

Java 如何用while循环中另一个变量的值替换变量的值

Java 如何用while循环中另一个变量的值替换变量的值,java,Java,如何用循环中另一个变量的值替换变量的值?我试图在一个循环中用变量fluidheight的值替换变量heightn的值,heightn的基值是20,但一旦完成1个循环(其中fluidheight是最终计算的),它将立即用fluidheight的值更改heightn的值。我尝试过使用heightn=fluidheight,反之亦然,并将代码行放置在多个位置,但仍然不起作用。它总是假设在多次循环后heightn为20。有什么建议吗 double heightn = 20; double

如何用循环中另一个变量的值替换变量的值?我试图在一个循环中用变量fluidheight的值替换变量heightn的值,heightn的基值是20,但一旦完成1个循环(其中fluidheight是最终计算的),它将立即用fluidheight的值更改heightn的值。我尝试过使用heightn=fluidheight,反之亦然,并将代码行放置在多个位置,但仍然不起作用。它总是假设在多次循环后heightn为20。有什么建议吗

    double heightn = 20;
    double g = 0;
    double sqt = heightn/2;
    double areaofnozzle = 0.0218209;
    double time = 0;
    double velocity;
    double volumelost;
    double totalvolume = 1005.309;
    double fluidheight = heightn;
    int x = 0;

    while (x < 2)
    {
        while (sqt!= g)
    {

        g=sqt;

        sqt = (heightn/g+g)/2;


    }
    time = time + 60;

    velocity = 8.02 * sqt;

    volumelost = (velocity * areaofnozzle) * time;

    fluidheight = (totalvolume - volumelost)/ 50.265;

    x = x + 1;
    System.out.println("Volume Lost = "+ volumelost);
    //System.out.println("Fluid Height = "+ fluidheight);
    System.out.println("Time = "+ time);
    System.out.println("Squre Root = "+ sqt);
    System.out.println(" ");
    System.out.println("HeightN = "+ heightn);

    heightn = fluidheight;
    }
双倍高度n=20;
双g=0;
双sqt=高度N/2;
双喷嘴面积=0.0218209;
双倍时间=0;
双速;
双卷纸;
两倍总体积=1005.309;
双流体高度=高度;
int x=0;
而(x<2)
{
while(sqt!=g)
{
g=sqt;
sqt=(高度/g+g)/2;
}
时间=时间+60;
速度=8.02*sqt;
体积损失=(速度*喷嘴面积)*时间;
流体高度=(总体积-体积损失)/50.265;
x=x+1;
System.out.println(“Volume Lost=“+volumelost”);
//System.out.println(“流体高度=+流体高度”);
System.out.println(“Time=“+Time”);
System.out.println(“Squre Root=“+sqt”);
System.out.println(“”);
System.out.println(“HeightN=“+HeightN”);
高度n=流体高度;
}

我有一些建议:

  • 格式和可读性非常重要。学习Java编码标准,并更多地注意大括号的位置、一致的缩进等。难以阅读的代码很难理解
  • 看起来您正在进行一些简单的流体计算,但很难理解变量的命名。多想想更好的名字
  • 用相等来比较双打是危险的。最好使用差值和公差的绝对值。浮点数不精确
  • 我已经计算出,当液体从油箱底部的喷嘴排出时,油箱中液体的高度是时间的函数

    你可以从质量守恒中导出方程:

    Rate of change of mass stored = Rate of mass in - Rate of mass out
    
    储存质量的变化率等于储罐面积(俯视储罐)乘以单位时间内液体高度的变化率。我不限制油箱的面积或周长的形状,但我假设油箱的侧面是直的:横截面积不随高度变化

    质量的速率为零

    质量流出率是通过喷嘴流出的质量流量。它是从伯努利方程推导出来的

    这是一个一阶常微分方程。您使用的是最简单的积分方案:带有固定时间步长的显式Euler积分

    以下是我的解决方案:

    import java.util.Map;
    import java.util.TreeMap;
    
    /**
     * Euler integration of first order ODE for emptying a tank through a nozzle.
     * User: mduffy
     * Date: 12/7/18
     * Time: 7:54 AM
     * @link https://stackoverflow.com/questions/53669186/how-can-i-replace-the-value-of-a-variable-with-a-value-from-another-variable-in/53669375?noredirect=1#comment94196737_53669375
     */
    public class Hydraulics {
    
        private static final double AREA_TANK = 1005.39/20.0;
        private static final double AREA_NOZZLE = 0.0218209;
        private static final double MASS_RATE_CONSTANT = 8.02;
    
    
        public static void main(String[] args) {
            double height = 20.0;
            int time = 0;
            int dt = 60;
            double tolerance = 1.0e-1;
            Map<Integer, Double> results = new TreeMap<>();
            while (height > tolerance) {
                results.put(time, height);
                height += derivative(time, height)*dt;
                time += dt;
            }
            System.out.println("Time  Height");
            for (int t : results.keySet()) {
                System.out.println(String.format("%5d %10.3f", t, results.get(t)));
            }
        }
    
        private static double derivative(int time, double height) {
            return -MASS_RATE_CONSTANT*AREA_NOZZLE*Math.sqrt(height)/AREA_TANK;
        }
    }
    
    在任何时间步长内损失的体积等于高度变化乘以储罐面积,即
    储罐面积=1005.39/20.0

    第一个时间步的体积变化为(19.066-20)*1005.39/20=-46.9517。到最后一个时间步,它下降到(0.062-0.140)*1005.39/20=-3.9210。由于喷嘴出口处的静压随着池中液体高度的降低而降低,因此流速减慢

    想知道高度的平方根从哪里来?提示:喷嘴的伯努利方程表示,出口速度与喷嘴处静压的平方根成正比,而静压的平方根与留在水箱中的水的高度成正比

    如何将一个变量的值替换为循环中另一个变量的值

    要用另一个变量
    B
    的值替换变量
    a
    的值,请执行以下操作:

    A = B; // After the execution of this line, the value of B will be assigned to A
    
    它是否在循环中并不重要,这不会改变任何事情

    我试图在一个循环中将变量
    heightn
    的值替换为变量
    fluidheight
    的值

    在您的情况下,看起来是这样的:

    heightn = fluidheight; // The value of fluidheight will be assigned to heightn
    
    heightn = fluidheight;
    System.out.println("Volume Lost = " + volumelost);
    System.out.println("Time = " + time);
    System.out.println("Squre Root = " + sqt);
    System.out.println(" ");
    System.out.println("HeightN = " + heightn);
    
    我认为您对第一次迭代的混淆可能是您在更改前显示了
    heightn
    的值。因此,在第一次执行后,您将始终在标准输出中看到,
    heightn
    的值此时为
    20

    • 在循环的第一次执行中,您将看到
      20
    • 在循环的第二次执行中,您将看到第一次执行的结果
    • 第二次执行的(最终)结果从未显示
    我建议你改变,你改变那部分如下:

    heightn = fluidheight; // The value of fluidheight will be assigned to heightn
    
    heightn = fluidheight;
    System.out.println("Volume Lost = " + volumelost);
    System.out.println("Time = " + time);
    System.out.println("Squre Root = " + sqt);
    System.out.println(" ");
    System.out.println("HeightN = " + heightn);
    

    最后,正如@David在评论中所说的,这是典型的情况,在这种情况下,您应该利用调试器的使用。

    在循环的最后一行指定heightn的值。但在分配新值之前,该变量的输出值。加

    System.out.println("HeightN = "+ heightn); 
    

    循环之后,您将在循环中看到计算后的变量值,或者简单地交换最后两行代码(println和赋值)

    您可以在循环中执行if语句。当您要查找的值等于正在循环的值之一时,您可以在此语句中指定新变量这是一个熟悉调试器使用的好机会。代码没有“假设”任何东西。它完全按照它所说的去做。你可能在做假设或依赖错误的理解。当您使用调试器时,您可以在代码执行时逐行检查代码,并准确地观察它正在执行的操作、变量中的值、每行代码如何更改这些值等。执行此操作时,哪行代码首先生成意外结果。价值观是什么?结果如何?你期待什么?为什么?我只是