跳过for循环的特定(指定)迭代

时间:2015-02-24 04:40:38

标签: c++ arrays algorithm for-loop numerical-methods

我对C ++很陌生,但我无法在网上找到解决方法,我觉得可能会有一个有趣,优雅的解决方案。

我最终试图为行星运动编写一个蛙跳算法。我已经定义了一个名为planet

的类
Planet(double mass, double x0, double x1, double v0, double v1)

我有一个存储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)
};

我想要计算每颗行星在每个星球上的重力引起的力。这包括实现行星i上的力的数学方程式:F_i = [i> = j的[(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";
}

但是,我想尝试排除一个特定的星球,比如说我在j上计算了j = 2的力。

for(int i=0; (i<j || i>j) && i<4; ++i){
cout << planets[i].getvx() << "\n";
}

此循环终止于2,仅打印p [0]和p [1]的v0值(通过类定义),而不是p [3]以及我喜欢的。同样,j = 1仅打印p [0]和p [1]的v0。

是否有方便的方法将条件置于满足我需要的for循环中,还是应该重新考虑我的方法?

6 个答案:

答案 0 :(得分:4)

把支票放在循环中:

for (int i=0; i<4; ++i) {
   if (i!=j) {
      cout << planets[i].getvx() << "\n";
   }
}

答案 1 :(得分:4)

为什么不试试这个

for(int i=0; i<4 ; ++i)
 {
   if( i != j )
   cout << planets[i].getvx() << "\n";
 }

这是我能想到的最简单的方法,无需尝试任何复杂的方法。您只需检查循环内i是否等于j。如果i不等于j,请输出。

如果您不想要这个,那么您可以像其他答案中建议的那样使用continue

for(int i=0; i<4 ; ++i)
 {
  if ( i == j )
  continue;
  cout << planets[i].getvx() << "\n";
 }

答案 2 :(得分:2)

如果您希望循环跳过 i == j时的内部行为,请使用continue关键字:

for (int i = 0; i < 4; i++) {
    if (i == j) {
        continue;
    }
    cout << planets[i].getvx() << "\n";
}

这会导致循环体被跳过。另一种方法是仅在i != j

时执行内部逻辑
for (int i = 0; i < 4; i++) {
    if (i != j) {
        cout << planets[i].getvx() << "\n";
    }
}

两种方式都达到了同样的目标。

答案 3 :(得分:2)

上面提出了很多建议,但为什么你的代码没有工作?

for(int i=0; (i<j || i>j) && i<4; ++i){
  cout << planets[i].getvx() << "\n";
}

请记住,只要循环条件为真,循环就会继续执行;一旦循环条件变为假,循环就会退出。你的循环条件是

(i<j || i>j) && i<4

对于这个表达式来说,&#34;&amp;&amp;&#34;两侧的两个子表达式都是真的。必须是真的。当i = j时

(i<j || i>j) 

表达式为false,因此循环条件为false并且循环终止,就像您观察到的那样。

答案 4 :(得分:1)

在for循环中使用关键字continue。它强制循环的下一次迭代

if(i==j) continue;

答案 5 :(得分:1)

如果确实坚持在for meta中使用它(而不是在循环中),请尝试以下操作:

for (int i = 0; i < 4; i + 1 == j ? i++ : i += 2)

但是,使用if (i == j) continue;可能是编写它的最简洁方法。