
本文介绍如何对 15×7 的观影人数矩阵按行求和,并准确找出总观影人数最多的电影(即行和最大值及其所在行索引),涵盖完整计算逻辑、代码实现与关键注意事项。
本文介绍如何对 15×7 的观影人数矩阵按行求和,并准确找出总观影人数最多的电影(即行和最大值及其所在行索引),涵盖完整计算逻辑、代码实现与关键注意事项。
在处理多维数据统计时,常见需求是“按行聚合后取极值”——例如本例中:一个 15×7 的二维数组 Main.attendants[i][j] 存储了 15 部电影(每行为一部电影)在 7 个影厅(每列为一个影厅)的观影人数。目标不是找单个单元格的最大值(如答案中错误示范的逐元素比较),而是先计算每部电影的总观影人数(即每行之和),再从中找出最大和及其对应的电影序号(行索引)。
以下是推荐的清晰、健壮且可扩展的实现方案:
✅ 正确步骤解析
- 逐行求和:遍历每一行(电影),累加该行所有列(7 个影厅)的数值;
- 动态追踪最大值:维护两个变量——maxSum 记录当前最大行和,bestMovieIndex 记录其行号;
- 避免常见错误:不混淆“单个单元格最大值”与“行和最大值”;不忽略边界(如空矩阵);确保索引语义清晰(行号即电影编号)。
? 完整可运行代码示例
private void PeliculaMasVistaButtonActionPerformed(java.awt.event.ActionEvent evt) {
// 假设 Main.attendants 已正确定义并初始化为 int[15][7]
int[] rowSums = new int[15]; // 可选:用于调试或后续复用
int maxSum = Integer.MIN_VALUE;
int bestMovieIndex = -1;
for (int i = 0; i < 15; i++) {
int sumRows = 0;
for (int j = 0; j < 7; j++) {
sumRows += Main.attendants[i][j];
}
rowSums[i] = sumRows; // 可选:保存各电影总人数
// 更新最大值及对应电影索引
if (sumRows > maxSum) {
maxSum = sumRows;
bestMovieIndex = i;
}
}
// 输出结果(电影编号从0开始,可根据业务调整为1-based)
System.out.println("最热门电影为第 " + (bestMovieIndex + 1)
+ " 部,总观影人数:" + maxSum);
}⚠️ 关键注意事项
- 初始化安全:maxSum 初始化为 Integer.MIN_VALUE,确保即使所有行和为负数也能正确捕获最大值;
- 语义明确:bestMovieIndex 直接对应电影序号(数组行索引),无需额外映射;
- 可扩展性:若需返回多部并列热门电影,可改用 List<Integer> 存储所有满足 sumRows == maxSum 的索引;
- 性能友好:时间复杂度 O(15×7) = O(1),空间复杂度 O(1)(不使用 rowSums 数组时);
- 防御性编程:生产环境建议增加空值/越界校验(如 if (Main.attendants == null))。
通过以上方法,你不仅能准确定位最热门电影,还能为后续分析(如排序、可视化、Top-K 查询)奠定坚实基础。










