use*_*340 2 c++ arrays algorithm for-loop numerical-methods
我对 C++ 很陌生,但我在网上找不到解决方法,我觉得可能有一个有趣、优雅的解决方案。
我最终试图为行星运动编写一个越级算法。我定义了一个名为行星的类
Planet(double mass, double x0, double x1, double v0, double v1)
Run Code Online (Sandbox Code Playgroud)
我有一个存储 4 个不同行星信息的数组:
Planet planets[] = {
Planet(2.0, -0.5, 0, -0.94, 0.65),
Planet(1.0, -0.6, -0.2, 1.86, 0.7),
Planet(1.0, 0.5, 1.0, -0.44, -1.40),
Planet(0.4, 0.6, 0.3, 1.15, -1.50)
};
Run Code Online (Sandbox Code Playgroud)
我将要计算每个行星在其他行星上的重力引起的力。这涉及对行星 i 上的力实施数学方程:F_i= sum over i!=j of [(G m_i m_j)/r_ij],其中 i 和 j 表示两个行星,j 每次递增,r_ij 表示距离两者之间。
在我开始将其作为一个整体考虑之前,我正在测试是否可以使用 for 循环从数组中选择一个特定的行星,并从该行星中选择一个特定的组件,然后打印出来。通过
for(int i=0; i<4; ++i){
cout << planets[i].getvx() << "\n";
}
Run Code Online (Sandbox Code Playgroud)
但是,我想尝试排除一个特定的行星,比如说我正在计算 j = 2 上的力。
for(int i=0; (i<j || i>j) && i<4; ++i){
cout << planets[i].getvx() << "\n";
}
Run Code Online (Sandbox Code Playgroud)
这个循环在 2 处终止,只打印 p[0] 和 p[1] 的 v0 值(通过类定义),而不是我想要的 p[3]。同样,j=1 只为 p[0] 和 p[1] 打印 v0。
是否有一种方便的方法可以在满足我需要的 for 循环中放置一个条件,或者我应该重新考虑我的方法?
为什么不试试这个
for(int i=0; i<4 ; ++i)
{
if( i != j )
cout << planets[i].getvx() << "\n";
}
Run Code Online (Sandbox Code Playgroud)
这是我能想到的最简单的方法,无需尝试任何复杂的方法。你只需要检查是否i等于j循环内。如果i不等于j,则给出输出。
如果您不想要这个,那么您可以continue像其他答案中建议的那样使用。
for(int i=0; i<4 ; ++i)
{
if ( i == j )
continue;
cout << planets[i].getvx() << "\n";
}
Run Code Online (Sandbox Code Playgroud)