Java二维数组沙漏问题代码输出0而非预期13如何修复
问题原因及修复方案
- 输入逻辑不匹配
你提供的输入样例直接给出6行共36个矩阵元素,没有预先输入行数、列数参数,但代码开头先执行了int rows =sc.nextInt(); int column = sc.nextInt();,会把输入第一行的前两个元素1、1误读为行数和列数,最终创建1×1的数组。后续沙漏计算的循环条件i<rows-2等价于i<-1,循环完全不执行,max始终保持初始值0,这是输出错误的核心原因。 - 负数场景处理逻辑缺陷
当前代码将max初始值设为0,若所有沙漏的求和结果都是负数,最终会错误返回0而非真实的最大负数和,不符合负数场景的处理要求。
修复方案
如果输入样例格式固定为6×6矩阵(经典沙漏题的标准输入规格),可以直接指定矩阵行列数,同时调整max的初始值为整数最小值:
import java.util.Scanner; public class Solution { public static void main(String[] args){ Scanner sc = new Scanner(System.in); // 修复点1:直接指定6×6的矩阵规格,适配输入样例 int rows = 6; int column = 6; int[][] a = new int[rows][column]; for(int i=0;i<rows;i++){ for(int j=0;j<column;j++){ a[i][j]=sc.nextInt(); } } // 修复点2:max初始值设为整数最小值,适配全负数场景 int sum=0,max=Integer.MIN_VALUE; for(int i=0;i<rows-2;i++){ for(int j=0;j<column-2;j++){ sum =(a[i][j]+a[i][j+1]+a[i][j+2]+a[i+1][j+1]+a[i+2][j]+a[i+2][j+1]+a[i+2][j+2]); if(sum>max){ max = sum; } } } System.out.println(max); } }
如果题目要求输入第一行必须先指定行列数,只需要在你现有输入样例的最开头补充一行6 6,同时将max的初始值改为Integer.MIN_VALUE即可得到正确输出。
内容的提问来源于stack exchange,提问作者Pavithra
相关产品推荐
相关产品推荐

