Estoy tratando de resolver el problema Plus Minus en HackerRank usando Typescript. Obtengo NaN como resultado en las dos primeras declaraciones de impresión, sin embargo, la última está funcionando. Esta es mi solución:
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); }Aquí está la salida:
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¿Alguien puede ayudarme a entender cuál podría haber sido el problema?
let pos: number, neg: number, zero: number = 0; Solo definió un valor predeterminado para zero en la línea anterior. En JS (o TS), el valor predeterminado de cualquier variable no está undefined a menos que establezca uno explícitamente.
undefined + 1 es NaN.
console.log(undefined + 1)El problema está en la inicialización de su valor.
let pos: number, neg: number, zero: number = 0;Si registras esto, obtendrás
pos=undefined neg=undefined zero=0 y ahora, si intenta agregar un número sin definir, le dará NaN
Inicialice pos, neg y cero a 0 correctamente.