新手技术求助:CSV犯罪统计作业的类间信息传递问题
嘿,我看你正在做Java读取犯罪统计CSV的作业,现在卡在类间信息传递的最佳方案上了对吧?结合你给出的初期代码,我给你几个实用的思路,都是Java里常用的方案,你可以根据作业的复杂度来选:
类间信息传递的几种适配方案
1. 构造函数传递(最直接的入门方案)
如果你的其他类(比如处理用户提问的类)需要用到crimeArray的数据,最直观的方式就是在创建依赖类实例时,把数组通过构造函数传进去。这样依赖关系清晰,代码也容易维护:
// 假设你有一个专门处理用户提问的类 public class CrimeQueryHandler { private String[][] crimeData; // 通过构造函数接收CSV读取后的数组 public CrimeQueryHandler(String[][] crimeData) { this.crimeData = crimeData; } // 这里写向用户提示问题、处理查询的逻辑 public void promptUserQuestions() { // 直接使用crimeData来实现统计查询,比如按年份查犯罪率 System.out.println("请输入要查询的年份:"); // 后续逻辑... } } // 你的USCrimeArray类可以这样调用 public class USCrimeArray { String crimeArray[][] = new String[21][20]; public void createCrimeArray() throws IOException { // 这里补充CSV读取逻辑,填充crimeArray BufferedReader br = new BufferedReader(new FileReader("crime_stats.csv")); String line; int row = 0; while ((line = br.readLine()) != null) { crimeArray[row++] = line.split(","); } br.close(); // 创建提问处理类实例,传递数据 CrimeQueryHandler handler = new CrimeQueryHandler(crimeArray); handler.promptUserQuestions(); } }
2. Setter方法注入(更灵活的方案)
如果你的类实例创建后才需要传递数据,或者后续可能需要更新数据,用Setter方法会更灵活:
public class CrimeQueryHandler { private String[][] crimeData; // Setter方法注入数据 public void setCrimeData(String[][] crimeData) { this.crimeData = crimeData; } public void promptUserQuestions() { // 使用crimeData处理逻辑 } } // 在USCrimeArray中调用 public class USCrimeArray { String crimeArray[][] = new String[21][20]; public void createCrimeArray() throws IOException { // 填充crimeArray逻辑... CrimeQueryHandler handler = new CrimeQueryHandler(); handler.setCrimeData(crimeArray); handler.promptUserQuestions(); } }
3. 静态变量/单例(谨慎使用)
如果crimeArray是全局唯一且不需要频繁修改的数据,可以考虑把它设为静态变量,或者把USCrimeArray做成单例模式。但要注意,这种方式会增加类之间的耦合度,除非是简单的作业场景,否则不推荐:
public class USCrimeArray { // 静态数组,全局可访问 public static String[][] crimeArray = new String[21][20]; public void createCrimeArray() throws IOException { // 填充crimeArray逻辑... } } // 其他类直接访问静态数组 public class CrimeQueryHandler { public void promptUserQuestions() { String[][] data = USCrimeArray.crimeArray; // 处理查询逻辑 } }
额外小提示:CSV读取的优化
你现在的createCrimeArray方法是占位状态,实际读取CSV时,如果遇到带逗号的字段(比如"Los Angeles, CA"),直接用split(",")会出错。如果作业允许使用第三方库,推荐用OpenCSV来解析;如果不允许,就要手动处理引号包裹的字段逻辑。
内容的提问来源于stack exchange,提问作者Joey Purdon
相关产品推荐
相关产品推荐

