跳过 for 循环的特定(指定)迭代
Skip particular (specified) iteration of for loop
我是 C++ 的新手,但我在网上找不到解决方法,我觉得可能有一个有趣、优雅的解决方案。
我最终想为行星运动编写一个蛙跳算法。我定义了一个名为 planet
的 class
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 of [(Gm_im_j) /r_ij],其中i和j表示两颗行星,j每次递增,r_ij两者之间的距离。
在我开始整体考虑之前,我正在测试是否可以使用 for 循环来 select 数组中的特定行星和该行星的特定组件,然后打印出来。通过
效果很好
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 值(通过 class 定义),而不是 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";
}
}
在 for 循环中使用关键字 continue。它强制循环的下一次迭代
if(i==j) continue;
为什么不试试这个
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";
}
如果您希望循环跳过 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";
}
}
两种方式实现相同的目标。
如果你真的坚持把它放在 for meta 中(而不是在循环中),试试这个:
for (int i = 0; i < 4; i + 1 == j ? i++ : i += 2)
但是,使用 if (i == j) continue;
可能是最简洁的编写方式。
上面提了很多建议,为什么你的代码不行呢??
for(int i=0; (i<j || i>j) && i<4; ++i){
cout << planets[i].getvx() << "\n";
}
记住只要循环条件为真,循环就会继续执行;一旦循环条件变为假,循环将退出。你的循环条件是
(i<j || i>j) && i<4
要使此表达式为真,“&&”两边的两个子表达式都必须为真。当 i=j 时
(i<j || i>j)
表达式为假,因此循环条件为假,循环终止,正如您观察到的那样。
我是 C++ 的新手,但我在网上找不到解决方法,我觉得可能有一个有趣、优雅的解决方案。
我最终想为行星运动编写一个蛙跳算法。我定义了一个名为 planet
的 classPlanet(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 of [(Gm_im_j) /r_ij],其中i和j表示两颗行星,j每次递增,r_ij两者之间的距离。
在我开始整体考虑之前,我正在测试是否可以使用 for 循环来 select 数组中的特定行星和该行星的特定组件,然后打印出来。通过
效果很好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 值(通过 class 定义),而不是 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";
}
}
在 for 循环中使用关键字 continue。它强制循环的下一次迭代
if(i==j) continue;
为什么不试试这个
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";
}
如果您希望循环跳过 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";
}
}
两种方式实现相同的目标。
如果你真的坚持把它放在 for meta 中(而不是在循环中),试试这个:
for (int i = 0; i < 4; i + 1 == j ? i++ : i += 2)
但是,使用 if (i == j) continue;
可能是最简洁的编写方式。
上面提了很多建议,为什么你的代码不行呢??
for(int i=0; (i<j || i>j) && i<4; ++i){
cout << planets[i].getvx() << "\n";
}
记住只要循环条件为真,循环就会继续执行;一旦循环条件变为假,循环将退出。你的循环条件是
(i<j || i>j) && i<4
要使此表达式为真,“&&”两边的两个子表达式都必须为真。当 i=j 时
(i<j || i>j)
表达式为假,因此循环条件为假,循环终止,正如您观察到的那样。