Java 如何用while循环中另一个变量的值替换变量的值
如何用循环中另一个变量的值替换变量的值?我试图在一个循环中用变量fluidheight的值替换变量heightn的值,heightn的基值是20,但一旦完成1个循环(其中fluidheight是最终计算的),它将立即用fluidheight的值更改heightn的值。我尝试过使用heightn=fluidheight,反之亦然,并将代码行放置在多个位置,但仍然不起作用。它总是假设在多次循环后heightn为20。有什么建议吗Java 如何用while循环中另一个变量的值替换变量的值,java,Java,如何用循环中另一个变量的值替换变量的值?我试图在一个循环中用变量fluidheight的值替换变量heightn的值,heightn的基值是20,但一旦完成1个循环(其中fluidheight是最终计算的),它将立即用fluidheight的值更改heightn的值。我尝试过使用heightn=fluidheight,反之亦然,并将代码行放置在多个位置,但仍然不起作用。它总是假设在多次循环后heightn为20。有什么建议吗 double heightn = 20; double
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=流体高度;
}
我有一些建议:
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语句。当您要查找的值等于正在循环的值之一时,您可以在此语句中指定新变量这是一个熟悉调试器使用的好机会。代码没有“假设”任何东西。它完全按照它所说的去做。你可能在做假设或依赖错误的理解。当您使用调试器时,您可以在代码执行时逐行检查代码,并准确地观察它正在执行的操作、变量中的值、每行代码如何更改这些值等。执行此操作时,哪行代码首先生成意外结果。价值观是什么?结果如何?你期待什么?为什么?我只是