Hackerrank Plus Minus问题:计算数组正负零占比函数无返回值
问题分析与修复方案
嘿,我来帮你排查plusMinus函数的问题~你的代码没返回结果,主要是几个关键逻辑错误导致的,咱们一步步来修正:
核心错误点
- 判断对象搞混了:循环里你判断的是索引
i,而不是数组中的元素arr[i]!这就导致你一直在统计索引的正负,完全没用到数组里的实际值,肯定统计不对。 - 变量作用域与计算位置错误:计数变量(
noOfPostive等)放在了函数外部,多次调用函数会导致计数累加出错;而且占比计算放在循环内部,每次循环都会重复计算,完全没必要。 - 缺少结果输出/返回逻辑:函数里没有把计算好的占比输出或者返回,所以你看不到任何结果。
- 变量名拼写小失误:
noOfPostive应该是noOfPositive(单词拼写错误,少了一个i)。
修正后的代码
function plusMinus(arr) { let noOfPositive = 0; let noOfNegative = 0; let noOfZero = 0; const length = arr.length; // 遍历数组元素,统计各类数量 for (let i = 0; i < length; i++) { const current = arr[i]; if (current > 0) { noOfPositive += 1; } else if (current < 0) { noOfNegative += 1; } else { noOfZero += 1; } } // 计算占比 const fractionOfPositive = noOfPositive / length; const fractionOfNegative = noOfNegative / length; const fractionOfZero = noOfZero / length; // 可以选择返回结果对象,或者直接输出 console.log(fractionOfPositive.toFixed(6)); // 按需求保留小数位数 console.log(fractionOfNegative.toFixed(6)); console.log(fractionOfZero.toFixed(6)); // 如果需要返回结果,就返回一个对象 return { positive: fractionOfPositive, negative: fractionOfNegative, zero: fractionOfZero }; }
修正说明
- 把计数变量移到函数内部,避免多次调用时的计数污染。
- 循环中判断的是数组当前元素
arr[i],而不是索引i。 - 占比计算放在循环结束后,只计算一次即可。
- 添加了
console.log输出结果,同时也支持返回结果对象,方便调用方使用。 - 用
let/const替代var,遵循更现代的JS语法规范。 - 修正了变量名的拼写错误,让代码更易读。
内容的提问来源于stack exchange,提问作者Mostafa Jaafer Ulobeed
相关产品推荐
相关产品推荐

