修复比较零和负数javascript



我在完成这项任务时遇到了一个问题。https://www.hackerrank.com/challenges/30-2d-arrays/problem.这是因为在尝试使用这个算法时,我得到了一个奇怪的结果。

function main(arr) {  
let max;
let sum;

for(let a=0; a<arr.length-2; a++){
for(let b=0; b<arr.length-2; b++){
sum = 
arr[a][b] + arr[a][b+1] + arr[a][b+2] + 
arr[a+1][b+1] + 
arr[a+2][b] + arr[a+2][b+1] + arr[a+2][b+2];
console.log(sum);
if(!max || sum > max){
max = sum;
}
}        
}
console.log(max)
}
main([
[-1,  1, -1,  0,  0, 0],
[ 0, -1,  0,  0,  0, 0],
[-1, -1, -1,  0,  0, 0],
[ 0, -9,  2, -4, -4, 0],
[-7,  0,  0, -2,  0, 0],
[ 0,  0, -1, -2, -4, 0],
]);

我得到的结果是-2,而不是0。这里的意思是负数>0。为什么会发生这种情况?

这是因为!代码中的最大部分。正如你所看到的,当max === 0在这种情况下,if部分变成

if(!0 && -9 > 0) {
}

虽然-9>0为假,但作为!0 ===为真,if块变为

if(!false || false) => if(true || false) => if(true)

这就是我们更新最大值的原因。

现在要解决您的问题,您可以在代码的第一行设置max = -Infinity,并从if块中删除!max部分。所以你的方法是,

function main(arr) {  
let max = -Infinity;
let sum;

for(let a=0; a<arr.length-2; a++){
for(let b=0; b<arr.length-2; b++){
sum = 
arr[a][b] + arr[a][b+1] + arr[a][b+2] + 
arr[a+1][b+1] + 
arr[a+2][b] + arr[a+2][b+1] + arr[a+2][b+2];
console.log(sum);
if( sum > max){
max = sum;
}
}        
}
console.log(max)
}
main([
[-1,  1, -1,  0,  0, 0],
[ 0, -1,  0,  0,  0, 0],
[-1, -1, -1,  0,  0, 0],
[ 0, -9,  2, -4, -4, 0],
[-7,  0,  0, -2,  0, 0],
[ 0,  0, -1, -2, -4, 0],
]);

最新更新