我试图编写一个脚本来找到最大的公因子(最高公因子/ HCF),但是循环向下计数,所以我想在找到第一个公因子后立即中断(因为它向下计数)所以这也是HCF)。
但是,我的代码结果显示了所有常见因素,并且一旦找到4,就没有突破循环,HCF为12和8。
这是:
function maxi(a, b) {
for (var i = a; i >= 1; i--) {
for (var j = b; j >= 1; j--) {
if (a % i == 0) {
if (b % j == 0 && i == j) {
console.log(i);
break;
}
}
}
}
}
maxi(12, 8);
答案 0 :(得分:5)
我猜你有正确的逻辑。
只需更改
if (b % j == 0 && i == j){
console.log(i);
break;
}
到
if (b % j == 0 && i == j){
console.log(i);
return;
}
答案 1 :(得分:4)
这样做的一种方法是使用“return”而不是“break”。
function maxi(a,b){
for (var i=a; i>=1; i--){
for (var j=b; j>=1; j--){
if (a % i == 0){
if (b % j == 0 && i == j){
return i;
}
}
}
}
}
console.log(maxi(12,8));
答案 2 :(得分:4)
像这样标记你的循环:
function maxi(a,b) {
loop1:
for (var i = a; i >= 1; i--){
loop2:
for (var j = b; j >= 1; j--){
if (a % i == 0){
if (b % j == 0 && i == j){
console.log(i);
break loop2; // Breaks out of all loops.
}
}
}
}
}
maxi(12,8);
人们忘记了这些存在,但它们是语言中完全有效的部分。
答案 3 :(得分:1)
您只需要测试是否已达到所需的输出,并在外部for循环中放入第二个断点,就像这样。
function maxi(a,b){
var iAmFinished = false;
for (var i=a; i>=1; i--){
for (var j=b; j>=1; j--){
if (a % i == 0){
if (b % j == 0 && i == j){
console.log(i);
iAmFinished = true;
break;
}
}
}
if (iAmFinished) {
break;
}
}
}
maxi(12,8);
答案 4 :(得分:0)
当你中断时,除非另有指定,否则你会从最近的循环中断。
您可以使用label指定要中断的特定循环。
function maxi(a, b) {
outer:
for (var i = a; i >= 1; i--) {
inner:
for (var j = b; j >= 1; j--) {
if (a % i == 0) {
if (b % j == 0 && i == j) {
console.log(i);
break outer;
}
}
}
}
}
maxi(12, 8);
答案 5 :(得分:0)
有两种同样优雅的方法可以达到同样的效果。
function maxi(a, b) {
for (var i = a; i >= 1; i--) {
for (var j = b; j >= 1; j--) {
if (a % i == 0) {
if (b % j == 0 && i == j) {
console.log(i);
return;
}
}
}
}
}
maxi(12, 8);
当在函数中调用return语句时,执行此操作 功能停止了。如果指定,则返回给定值 功能来电。如果省略表达式,则返回undefined 代替。
function maxi(a, b) {
outerloop:
for (var i = a; i >= 1; i--) {
for (var j = b; j >= 1; j--) {
if (a % i == 0) {
if (b % j == 0 && i == j) {
console.log(i););
break outerloop;
}
}
}
}
}
maxi(12, 8);
带标签的语句可以与break或continue语句一起使用。 它为带有标识符的语句添加前缀,您可以参考该标识符。
[...]
您可以使用标签来标识循环,然后使用break或 继续声明以指示程序是否应该中断 循环或继续执行。