我使用arraylist存储数据,我尝试没有任何if语句的程序从文件中读取并填充arraylis并打印它,它工作正常,但当我使用迭代和if语句和逻辑条件时它会给出异常超出了arraylist的范围,
ArrayList<String> accon = new ArrayList<String>();
ArrayList<Double> balance = new ArrayList<Double>();
try {
BufferedReader Buffer = new BufferedReader(new FileReader(new File(
"D://transactions.txt")));
String line = null;
while ((line = Buffer.readLine()) != null) {
// String arr[] = line.split(" ");
String accn = line.substring(0, 17);
String Case = line.substring(18, 19);
double a = Double.parseDouble(line.substring(20));
// System.out.print(balance.size());
// for (int i = 0; i < accon.size(); i++) {
int i = 0;
System.out.print(accon.get(i).equals(accn));
while (accon.size() >= i) {
if (accon.get(i).equals(accn)) {
if (Case.equals("D")) {
balance.set(i, balance.get(i) - a);
} else {
balance.set(i, balance.get(i) + a);
}
} else {
accon.add(accn);
balance.add(a);
// break;
}
i++;
}
// }
}
System.out.print("-------------------");
for (int i = 0; i < accon.size(); i++) {
System.out.println(accon.get(i));
System.out.println(balance.get(i));
// System.out.println(accon.size());
}
} catch (Exception e) {
System.out.print("" + e);
}
java.lang.IndexOutOfBoundsException:Index:0,Size:0
答案 0 :(得分:3)
您在列表accon
中没有任何元素,但您在其中使用accon.get(0)
System.out.print(accon.get(i).equals(accn)); //here is the error
导致错误说您正在阅读0
索引,但列表大小为0
答案 1 :(得分:2)
accon
变量在您尝试从中获取内容时没有任何内容,此处:
System.out.print(accon.get(i).equals(accn));
在这里:
if (accon.get(i).equals(accn)) {
考虑到您的对象,错误在print命令中,并且while
中的迭代将永远不会被处理:while (accon.size() >= i) {
。
您必须首先将对象添加到其中,以便您可以迭代并删除对象,这样您就可以离开while
。