我正在尝试解决正负HackerRank使用Typescript的问题。我得到NaN作为前两个print语句的结果,然而,最后一个是工作的。这是我的解决方案:
function plusMinus(arr: number[]): void {
// Write your code here
let pos: number, neg: number, zero: number = 0;
for (let i=0; i< arr.length; i++){
if(arr[i]>0){
pos+=1;
}
else if(arr[i]<0){
neg+=1;
}
else{
zero+=1;
}
}
let len: number = arr.length;
let posRatio = (pos/len).toFixed(6);
let negRatio = (neg/len).toFixed(6);
let zeroRatio = (zero/len).toFixed(6);
console.log(posRatio);
console.log(negRatio);
console.log(zeroRatio);
}
输出如下:
Compiler Message
Wrong Answer
Input (stdout)
6
-4 3 -9 0 4 1
Your Output (stdout)
NaN
NaN
0.166667
Expected Output
0.500000
0.333333
0.166667
有谁能帮我弄明白问题是什么吗?let pos: number, neg: number, zero: number = 0;
您只在上面一行中为zero
定义了一个默认值。在JS(或TS)中,任何变量的默认值都是undefined
,除非你显式地设置一个。
undefined + 1
为NaN。
console.log(undefined + 1)
进一步阅读
问题在你的值初始化。
let pos: number, neg: number, zero: number = 0;
如果你记录这个,你将得到
pos=undefined
neg=undefined
zero=0
现在如果你尝试将number加上undefined它会得到NaN
正确地初始化pos,负和零为0。