两个数字之间的代码相乘错误地输出数字

时间:2017-02-06 01:38:45

标签: javascript

function showMultiples(num, numMultiples){
    for(i=1; i<=numMultiples; i++){
        var multiple = num + " x " + i + " = " + num * i;

    }

    return multiple;
} 
console.log('showMultiples(2,8) returns: ' + showMultiples(2,8));

对于这段代码,函数应该做的是,通过查看num和numMultiples变量,它应该给出两个数字可能的乘法列表。因此控制台应该打印出来 2x1 = 2 2x2 = 4 2x3 = 6 2x4 = 8 2x5 = 10 2x6 = 12 2x7 = 14 2x8 = 16

但是,这段代码打印出2x8 = 16的任何猜测为什么?

2 个答案:

答案 0 :(得分:0)

您已将值分配给multiple,然后在循环结束时将其返回,这意味着多个将为2x8。如果您在console.log(multiple)下面var multiple = num + " x " + i + " = " + num * i;,则会看到它正确打印出来。

编辑:

function showMultiples(num, numMultiples){
var result = [];
for(i=1; i<=numMultiples; i++){
    result.push(num + " x " + i + " = " + num * i);
}

return result.join(' ');
} 

将结果添加到array,当function完成时,join array内的值并返回结果。

答案 1 :(得分:0)

您只有一个print语句,这是在循环之外。如果要多次打印,则需要将print语句放在循环中,如下所示:

function showMultiples(num, numMultiples) {
    console.log(`showMultiples(${num}, ${numMultiples}) returns:`);
    Array.from({length: numMultiples}, (v, k) => k + 1).
        forEach(i => console.log(`${num}×${i} = ${num * i}`));
}
showMultiples(2, 8)
// showMultiples(2, 8) returns:
// 2×1 = 2
// 2×2 = 4
// 2×3 = 6
// 2×4 = 8
// 2×5 = 10
// 2×6 = 12
// 2×7 = 14
// 2×8 = 16

然而,这是糟糕的设计。您不应该混合数据转换和I / O.将两者分开并首先完全构建数据要好得多,然后打印它:

function showMultiples(num, numMultiples) {
    return Array.from({length: numMultiples}, (v, k) => k + 1).
        map(i => `${num}×${i} = ${num * i}`).
        join(", ");
} 
console.log(`showMultiples(2, 8) returns: ${showMultiples(2, 8)}`);
// showMultiples(2, 8) returns: 2×1 = 2, 2×2 = 4, 2×3 = 6, 2×4 = 8, 2×5 = 10, 2×6 = 12, 2×7 = 14, 2×8 = 16

这是更惯用的ECMAScript。