中断语句不会中断循环
Break statement won't break the loop
我想设置 2 个数字(n1 和 n2)的第一个最小公倍数,但我的 break 语句不起作用。 我不想使用返回(它有效)。 有没有办法解决这个问题? 谢谢。
var firstDayTogether,n1,n2;
for(var i=1;i<12345;i++){
for(var j=1;j<12345;j++){
if((s1*i)==(s2*j)){
firstDayTogether=(s1*i);
break;
}
}
}
你只是在打破内部循环。您可以使用标签来指定要结束的循环。
outerloop: for( var i=1; i<12345; i++) {
for( var j=1; j<12345; j++) {
if((s1*i)==(s2*j)) {
firstDayTogether = s1*i;
break outerloop; // <== !!
}
}
}
如注释中所述,break
只会中断它所在的循环。 它不会脱离嵌套循环的外层。
将嵌套循环放入函数中,然后找到结果时自然可以返回结果。
var firstDayTogether,n1,n2;
function findFirst(s1, s2) {
for(var i=1;i<12345;i++){
for(var j=1;j<12345;j++){
if((s1*i)==(s2*j)){
return (s1*i);
}
}
}
}
firstDayTogether = findFirst(n1, n2);
有一些方法可以提高效率:
-
第一个是直接测试可分性,n2 必须是 LCM n1*i 的除数,这样只有一个循环,不需要标签:
for ( var i=1; i<12345; i++) { if((n1*i) % n2 == 0) { firstDayTogether = n1*i; break; } }
-
第二个改进是应用数学
LCM(n1,n2) = n1·n2/GCD(n1,n2)
对于 GCD,您可以使用您喜欢的欧几里得算法变体。
var a=n1; var b=n2; while(b!=0){ var r=a%b; a=b; b=r; } firstDayTogether = n1*n2/a;
第一个变体甚至更短,没有中断:
var i;
for (i=1; (n1*i) % n2 != 0; i++) { }
firstDayTogether = n1*i;
相关文章:
- 中断javascript循环
- 当使用return语句时,循环不会中断
- Javascript数组推送中断循环
- 为什么内部Javascript循环会阻止外部循环中断(即无限循环)
- Javascript代码中断循环
- 在循环顶部中断循环的显式条件
- 完成ajax调用数组的循环,而不是在某个调用出错时中断
- 在负数之前中断循环
- 中断循环函数
- 中断循环的 Web Worker
- 中断语句不会中断循环
- 基于不存在的元素中断循环
- 节点函数未中断循环
- 这个for循环如何决定何时中断循环
- 是Javascript中的break关键字,仅用于中断循环
- getElementById()正在中断循环
- 在 Javascript 中从开关大小写内部中断循环
- 每三次迭代后中断循环
- jQuery 使用回调在 AJAX 请求中中断循环
- js继续和中断循环