
本文介绍如何仅使用基础数组和嵌套循环,从 csv 数据的二维字符串数组中提取指定导演(如 christopher nolan)的所有电影,并按其所属类型分组打印,不依赖集合类或高级数据结构。
本文介绍如何仅使用基础数组和嵌套循环,从 csv 数据的二维字符串数组中提取指定导演(如 christopher nolan)的所有电影,并按其所属类型分组打印,不依赖集合类或高级数据结构。
在 Java 中处理结构化 CSV 数据时,若受限于只能使用原始数组(不能使用 ArrayList、HashMap 或 Set),实现“按导演 → 按类型 → 列出电影”的三级分组输出,关键在于双重筛选逻辑:先确定目标导演涉及的所有唯一类型,再对每个类型遍历全表,精准匹配“导演 + 类型”组合对应的电影名称。
以下为完整可运行的解决方案(已适配问题中定义的数据结构与索引约定):
✅ 前提假设与索引说明
-
movieCinema是String[][]二维数组,首行为表头(movieCinema[0]),实际数据从movieCinema[1]开始; - 列索引按问题描述:
-
idSale→ 索引0 -
Movie→ 索引1 -
Genre→ 索引2 -
Director→ 索引3⚠️ 注意:原问题中
search(..., director, 4, 3)的searchCol=4存在越界风险(共 4 列,索引应为0~3)。正确列索引应为3(Director 列),下文代码已修正。
Alibabacloud Sdk Client Initialization For Java下载在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
? 核心方法:printMoviesByGenreForDirector
public static void printMoviesByGenreForDirector(String[][] movieCinema, String director) {
// Step 1: 提取该导演所有出现过的 Genre(含重复),再去重 → 得到唯一类型数组
String[] allGenresForDirector = search(movieCinema, director, 3, 2); // searchCol=3 (Director), indexCol=2 (Genre)
String[] uniqueGenres = uniqueValues(allGenresForDirector);
// Step 2: 遍历每个唯一类型,查找该导演在此类型下的所有电影
System.out.println(director);
for (int g = 0; g moviesInThisGenre = new java.util.ArrayList(); // ← 仅用于演示逻辑清晰性;实际需替换为数组模拟
// ✅ 替代方案(纯数组):先计数,再分配,再填充
int count = 0;
for (int i = 1; i <blockquote><p>? <strong>为什么不用 <code>uniqueValues(search(...))</code> 直接获取电影?</strong><br>
因为 <code>uniqueValues</code> 会抹去“电影-类型”的关联关系。例如《Inception》和《Interstellar》同属 Christopher Nolan 且都是 Sci-Fi,但若先取全部电影再唯一化,就丢失了哪部电影属于哪个类型的信息。必须<strong>每次按“导演+类型”联合条件实时筛选</strong>,才能保证分组准确。</p></blockquote><h3>? 关键注意事项</h3>
-
索引安全:确保
movieCinema[i][3](Director)和movieCinema[i][2](Genre)不越界,且i ≥ 1跳过表头; -
空值/空白处理:生产环境中建议增加
!= null && !trim().isEmpty()判断,避免NullPointerException; - 性能提示:本方案时间复杂度为 O(G × N)(G = 唯一类型数,N = 总行数),对 80 行数据完全可接受;若数据量增大,需考虑预构建索引(仍可用二维数组模拟);
-
字符匹配:
equals()区分大小写。若需忽略大小写,改用equalsIgnoreCase()。
✅ 最终调用示例
public static void main(String[] args) {
// 假设已完成 CSV 读取并初始化 movieCinema
String[][] movieCinema = loadCsvAs2DArray("movies.csv");
String director = "Christopher Nolan"; // 注意拼写:原文本中为 "Chistopher Nolan"(少 'o'),需校验原始数据
printMoviesByGenreForDirector(movieCinema, director);
}
通过以上结构化步骤,你无需任何高级集合类,仅凭多层 for 循环与基础数组操作,即可精准实现导演→类型→电影的层级化输出,完全满足题目约束与业务需求。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










