本文介绍如何对一个 15×7 的观众人数矩阵,先按行求和(每行代表一部电影在 7 个影厅的总观影人次),再从中定位总和最大的行索引及数值,准确识别“最热门电影”。
本文介绍如何对一个 15×7 的观众人数矩阵,先按行求和(每行代表一部电影在 7 个影厅的总观影人次),再从中定位总和最大的行索引及数值,准确识别“最热门电影”。
在电影排片分析场景中,常需基于多影厅的观众数据判断哪部影片最受欢迎。给定一个 int[15][7] 二维数组 Main.attendants(15 行 = 15 部电影,7 列 = 7 个影厅),目标不是找单个单元格最大值,而是计算每行总和,再比较这 15 个行和,找出最大值及其对应的电影编号(即行索引)。
⚠️ 注意:原问题代码中仅完成了行求和计算,但未保存结果,也未进行比较——这是常见逻辑断点。正确做法需三步:
- 为每行计算总和;
- 实时跟踪当前最大行和及其行号;
- 最终返回该行号(电影序号)与总人数。
以下是完整、健壮的实现方案:
private void PeliculaMasVistaButtonActionPerformed(java.awt.event.ActionEvent evt) {
// 初始化:最大总和设为最小可能值,避免首行为0时比较失效
int maxSum = Integer.MIN_VALUE;
int bestMovieIndex = -1; // 对应最热门电影的行索引(0-based)
// 遍历15部电影(15行)
for (int i = 0; i < 15; i++) {
int rowSum = 0;
// 累加该电影在7个影厅的观众数
for (int j = 0; j < 7; j++) {
rowSum += Main.attendants[i][j];
}
// 更新最大值及对应电影索引
if (rowSum > maxSum) {
maxSum = rowSum;
bestMovieIndex = i;
}
}
// 输出结果(电影编号通常从1开始计数,故+1)
System.out.println("最热门电影是第 " + (bestMovieIndex + 1)
+ " 部,总观影人次为:" + maxSum);
}✅ 关键优化说明:
立即学习“Java免费学习笔记(深入)”;
- 使用 Integer.MIN_VALUE 初始化 maxSum,确保即使所有行和为负数也能正确捕获最大值;
- 不额外声明数组存储15个行和,节省空间 —— 采用“边算边比”的在线算法(online algorithm),时间复杂度 O(15×7)=O(1),空间复杂度 O(1);
- bestMovieIndex 明确记录电影位置,便于后续扩展(如高亮界面、调取影片详情等)。
? 进阶建议(可选):
若需支持并列最热门(多个电影总和相同且均为最大),可改用 List<Integer> 存储所有 bestMovieIndex;若矩阵维度不固定,建议将 15 和 7 抽取为常量或通过 attendants.length 与 attendants[0].length 动态获取,提升代码可维护性。
至此,你已掌握在固定维度业务矩阵中精准定位“行级聚合最大值”的标准 Java 实现模式。










