Java处理CSV时numberPositive变量未递增的问题排查
Java CSV分析中numberPositive变量未递增的问题排查
以下是针对你代码中问题的逐一排查和修正方案:
1. 编译错误:未定义的csvFile变量
你定义了文件路径变量path,但创建FileReader时误用了未声明的csvFile,这会直接导致编译失败,程序根本无法正常执行。
修正:
// 把csvFile替换为已定义的path变量 try (BufferedReader br = new BufferedReader(new FileReader(path))) {
2. 索引获取逻辑错误:indexOf导致的重复匹配问题
遍历Variable集合时,Variable.indexOf(e)只会返回第一个匹配元素的索引。如果集合中有多个"VIB1 DISTANCE",后续匹配项都会复用第一个的索引,导致priorDistance和VibDistance取到完全错误的位置值,甚至触发索引越界异常。
修正:
改用带索引的循环,直接通过当前索引获取对应数据:
// 替换原有的增强for循环 for (int i = 0; i < Variable.size(); i++) { String e = Variable.get(i); if (e.equalsIgnoreCase("VIB1 DISTANCE")) { // 跳过第一个元素,避免i-1=-1引发索引越界 if (i == 0) { continue; } double priorDistance = Distance.get(i - 1); double VibDistance = Distance.get(i); if ((VibDistance - priorDistance) >= priorDistance) { numberPositive++; } } }
3. 字符串匹配的潜在空格问题
即使你确认字符串内容一致,CSV单元格可能包含前后空格(比如" VIB1 DISTANCE "),此时equalsIgnoreCase无法匹配。
修正:
先对字符串做去空格处理:
if (e.trim().equalsIgnoreCase("VIB1 DISTANCE")) { // 后续逻辑 }
4. targetColumn默认值的风险
如果用户输入的鱼名不在fishCodes映射中,targetColumn会保持默认值0,执行cells[targetColumn-1]时会抛出ArrayIndexOutOfBoundsException,程序直接中断。
修正:
添加输入校验,确保targetColumn被正确赋值:
String nameOfFish = write.next(); HashMap<String,Integer> fishCodes = fishCodes(); if (!fishCodes.containsKey(nameOfFish)) { System.err.println("输入的鱼名不存在!"); return; } // 去掉冗余的getValue方法,直接获取值 targetColumn = fishCodes.get(nameOfFish);
5. 行范围边界问题
currentRow<1215会限制读取到第1214行,需要确认你的目标数据是否包含在这个范围内,如果目标行包含1215,需改为currentRow<=1215。
内容的提问来源于stack exchange,提问作者Ahmad Ziada
相关产品推荐
相关产品推荐

