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

编写的最大代价算法始终返回0,遍历全集却仅输出0的原因排查

排查遍历数组返回最大代价却始终为0的问题

结合你给出的输入示例和代码片段,我梳理了几个最可能导致结果始终为0的原因,以及对应的排查方向:

1. 输入数据读取逻辑遗漏了标记处理

你的输入示例是3 4 P 2 4 3 2 9 6 9 13 3 8 E,其中P和E是起始/结束标记,但从你的代码片段来看,你只读取了row和col,之后直接开始处理数据——这会导致第一个要读取的是字符串P,而stdin.nextInt()会因为类型不匹配抛出异常(如果没捕获的话程序会崩溃),或者你用了错误的方式处理,最终导致gameBoard数组完全没有被赋值,保持初始的全0状态,那计算最大代价自然返回0。

修复建议:
读取完row和col后,先跳过P标记,再读取row*col个整数填充数组,最后跳过E标记:

// 跳过起始标记P
stdin.next();
for (int i = 0; i < row; i++) {
    for (int j = 0; j < col; j++) {
        gameBoard[i][j] = stdin.nextInt();
    }
}
// 跳过结束标记E
stdin.next();

2. 最大代价的初始化或更新逻辑错误

如果数组已经被正确填充,但结果还是0,大概率是最大值计算环节出了问题:

  • 比如你初始化maxCost为0,但如果遍历的时候判断条件写反了(比如if (currentVal < maxCost)而不是>),就永远不会更新最大值;
  • 或者你根本没在遍历中更新maxCost变量,直接返回了初始的0。

修复建议:
初始化maxCost时尽量用数组的第一个元素(避免数组全为负数的极端情况),然后遍历每个元素正确更新最大值:

int maxCost = gameBoard[0][0];
for (int[] rowArr : gameBoard) {
    for (int val : rowArr) {
        if (val > maxCost) {
            maxCost = val;
        }
    }
}

3. 数组填充时的索引或循环逻辑错误

比如你创建了row*col的二维数组,但填充时循环次数不对,或者行/列索引搞反了,导致数组只有部分被赋值,剩下的还是0。如果输入的有效数值都比0小(虽然你的示例里是正数,但不排除其他测试用例),或者你刚好没遍历到有值的区域,结果也会是0。

排查方法:
在填充数组后,加一段代码打印整个数组的内容,确认所有元素都被正确赋值:

// 打印数组验证
for (int[] rowArr : gameBoard) {
    System.out.println(Arrays.toString(rowArr));
}

内容的提问来源于stack exchange,提问作者gwiz_kid

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:33:34