这是我的代码错误:
TypeError: Cannot read property 'length' of null
at countPositivesSumNegatives
at /runner/frameworks/javascript/cw-2.js:179:21
at Promise._execute
at Promise._resolveFromExecutor
at new Promise
at describe
at Object.handleError
at ContextifyScript.Script.runInThisContext
at Object.exports.runInThisContext
目标是创建一个接收随机数组(输入)的函数,并返回正数的数量和负数的总和。一切正常,除了我上面的错误信息,这是错误的价值测试,无论这意味着什么
function countPositivesSumNegatives(input)
{
let negSum = 0;
let count = 0;
let arr = [];
for(i = 0; i < input.length; i++) {
if(input[i] > 0)
{
count++;
}
if (input[i] < 0)
{
negSum += input[i];
}
if (!input[i]) {
negSum = negSum;
count = count;
}
}
arr.push(count,negSum);
return arr;
}
}
答案 0 :(得分:3)
听起来你有一些针对你的代码运行的自动化测试,他们正在检查你如何处理错误的输入。您的代码未设置为处理除预期的数字数组之外的任何内容,因此它无法通过这些测试。
你可以通过很多方式解决这个问题,但这很简单,只需要
if (input === null) {
return 'Input invalid'; // or something like that
}
// put your for loop here
会做到这一点。有可能,您可能会面临更多需要处理意外输入的测试用例。我希望这会有所帮助。
答案 1 :(得分:1)
正如melpomene所暗示的那样,由于您尝试在.length
对象上调用null
,因此会抛出该类型错误。
由于是出现了错误的值测试&#34;,听起来测试套件正在针对您的解决方案运行,其中一个测试是检查您是否正在处理错误{ {1}},你不是,因此错误。
我建议在开始处理之前对input
进行一些验证。只需在顶部放置一个input
块,确保if
不是input
,实际上是一个数字数组。
我假设您有关于无效null
时该怎么做的说明?也许只是回来?
答案 2 :(得分:0)
你应该能够处理null数组..
以下是解决这个问题的方法(检查null):
function countPositivesSumNegatives(input) {
let negSum = 0;
let count = 0;
let arr = [];
if (input != null) {
for (i = 0; i < input.length; i++) {
if (input[i] > 0) {
count++;
}
if (input[i] < 0) {
negSum += input[i];
}
if (!input[i]) {
negSum = negSum;
count = count;
}
}
}
arr.push(count, negSum);
return arr;
}