java - 使用嵌套的 while 循环添加到 ArrayList 时出现 IndexOutOfBoundsException
问题描述
我正在尝试创建一个程序,它读取一个包含一个州每个学区的人数的文件,并输出总人数、儿童总数和贫困线以下儿童的总数。有 56 个状态,但我只能得到 55 个的输出。
我也尝试放入int i = 0
第一个 while 循环,但我得到了一堆 0。
int i = 0; int j = 1;
while (j <= Integer.parseInt( popInfo.get(popInfo.size() - 1).getStateCode() )) {
int tPopCt = 0, cPopCt = 0, cPovPopCt = 0;
while (popInfo.get(i).getStateCode().equals(String.format("%02d", j))) {
tPopCt += Integer.parseInt(popInfo.get(i).getTotalPopulation());
cPopCt += Integer.parseInt(popInfo.get(i).getChildPopulation());
cPovPopCt += Integer.parseInt(popInfo.get(i).getChildPovertyPopulation());
i++;
}
output.add(new Output(String.format("%02d", j), tPopCt, cPopCt, cPovPopCt));
j++;
}
我希望输出的最后一行以 56(最后一个 StateCode)开头,但是我得到了一个错误。当我将第一个 while 循环设置为j < ...
而不是 时j <= ...
,我得到55 5956920 963445 157356
正确但不包括 56。
请帮忙。泰
编辑
错误消息和堆栈跟踪...
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index 13486 out of bounds for length 13486
at java.base/jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:64)
at java.base/jdk.internal.util.Preconditions.outOfBoundsCheckIndex(Preconditions.java:70)
at java.base/jdk.internal.util.Preconditions.checkIndex(Preconditions.java:248)
at java.base/java.util.Objects.checkIndex(Objects.java:372)
at java.base/java.util.ArrayList.get(ArrayList.java:458)
at Poverty.<init>(Poverty.java:35)
at Poverty.main(Poverty.java:70)
解决方案
你应该考虑重新设计你的程序。您没有写popInfo
集合中元素的类型是什么,所以我们称它为PopData
。也许您应该使用一个 for-each 循环而不是嵌套的 while 循环。data
在这种情况下,您的程序结构可能如下所示(从代表集合中一条数据记录的变量中提取值):
int globalTPopCt = 0;
int globalCPopCt = 0;
int globalCPovPopCt = 0;
for(PopData data : popInfo) {
int state = Integer.parseInt(data.getStateCode());
//local counters
int localTPopCt = Integer.parseInt(data.getTotalPopulation());
int localCPopCt = Integer.parseInt(data.getChildPopulation());
int localCPovPopCt = Integer.parseInt(data.getChildPovertyPopulation());
//global (cumulated) counters
globalTPopCt += localTPopCt;
globalCPopCt += localCPopCt;
globalCPovPopCt += localCPovPopCt;
output.add(new Output( ... ));
}
推荐阅读
- sockets - 我无法获取通过存在于 elixir, phoenix 中加入频道的所有用户的列表
- python-3.x - 为什么保存 Image 对象对于 thumbnail() 和 resize() 不一样?
- python - 如何获取用户在服务器 [Discord.py] 中发送的所有消息?
- php - laravel BadMethodCall() 在 api 中校准索引时出错
- kubernetes - Kubernetes - 容器成功完成后执行脚本
- php - 使用 PHP 在页面查看计数器中获取异常错误
- python - 如何在单个命令中使用 bash 调用 python 脚本时设置环境变量值
- python - 编写一个程序来找出给定的帖子是否在谈论“哈利”或不使用 Python?
- video - 如何使文本悬停以播放视频
- python - 安装具有损坏 rtree 依赖关系的 Brain Scaffold Builder