修复比较零和负数 javascript
fix comparing zero and negative number 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 部分。如您所见,当 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],
]);
我在完成这项任务时遇到了问题。 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 部分。如您所见,当 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],
]);