You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 04:54:01