Java读取txt投注数据存入Bet类ArrayList无整数值问题排查
问题原因
- 你混淆了ArrayList的初始容量和实际元素个数:
new ArrayList(12)仅指定底层数组的初始长度,刚创建的ArrayList没有任何元素,size()方法返回值为0,因此你写的存值循环条件从一开始就不满足,循环体完全不会执行,没有任何数据存入arrayBets。 - 你误用了
set方法存入新元素:set方法仅用于替换已存在的指定索引位置的元素,空ArrayList调用set会直接抛出索引越界异常,新增元素需要使用add方法。
修正后的读取逻辑
while((line = br.readLine()) != null) { Bet currentBet = new Bet(); String[] strings = line.split("\\s+"); currentBet.setName(strings[0]); // 按拆分后的字符串数组长度遍历数字部分 for(int i = 1; i < strings.length; i++) { int num = Integer.parseInt(strings[i]); // 用add方法添加元素到ArrayList currentBet.arrayBets.add(num); } arrayTotalBets.add(currentBet); j++; }
额外优化建议
- 给ArrayList加上泛型约束,修改定义为
public ArrayList<Integer> arrayBets = new ArrayList<>(12);,避免类型转换风险 - 尽量不要用public修饰类属性,建议将arrayBets改为private,提供对应的get/set方法做封装访问,符合面向对象规范
内容的提问来源于stack exchange,提问作者Lekost93
相关产品推荐
相关产品推荐

