HackerRank问题PlusMinus使用for循环

时间:2019-09-30 16:21:00

标签: javascript arrays loops

对于这个特定的HackerRank问题,我需要非常具体的答案:https://www.hackerrank.com/challenges/plus-minus/problem

为什么这段代码通过所有测试用例?

function plusMinus(arr) {
let positives = 0
    let negatives = 0
    let zeros = 0
    const length=arr.length

    for (var i = 0; i < arr.length;i++){
        if (arr[i] > 0) {
            positives++
        } else if (arr[i] < 0) {
            negatives++
        } else {
            zeros ++
        }
    }

    const positiveRatio = Number(positives / length).toFixed(6)
    const negativeRatio = Number(negatives / length).toFixed(6)
    const zeroRatio = Number(zeros / length).toFixed(6)

    console.log(positiveRatio)
    console.log(negativeRatio)
    console.log(zeroRatio)
}

为什么此代码未通过任何测试用例? (我已经编辑了我的代码:对不起,以前的错误代码)此代码也不起作用。

function plusMinus(arr) {
var l = arr.length;
var positiveCounter = 0;
var negativeCounter = 0; 
var zeroCounter = 0;

for(var i=0; i<=l; i++) {
    if (arr[i]>0) { 
        positiveCounter+=1;
    } else if (arr[i]<0) { 
        negativeCounter+=1; 
    } else { 
        zeroCounter+=1; 
    }
}

console.log (
(positiveCounter/l).toFixed(6)+ '\n' +(negativeCounter/l).toFixed(6)+ '\n' +(zeroCounter/l).toFixed(6) );
 }

我不想要替代方法来解决这个问题。我只想知道为什么第一个代码有效而第二个代码无效???

1 个答案:

答案 0 :(得分:2)

这两个代码不同,您将数字除以长度两次

  • 首先分配给变量(var p= ...
  • 第二次执行console.log((p/l).toFixed(6)

另外,就像@DhananjaiPai提到的那样,它们有多个console.log,而您只有一个带有破碎字符的字符,这些字符可以由OS(\r\n\n)来解释

您的循环中也有问题,我将让您找到一个错误,但请记住,一个数组从索引0开始,如果该数组具有3个元素,则将为[0, 1, 2]