使用索引获取数组列表中所有元素的总和会产生意外的输出。我的代码出了什么问题?

时间:2015-03-30 13:43:39

标签: java arrays

我有一个包含四个文件的文件夹。四个文件中的每一个都包含一个整数。我的代码将文件中的整数读入ArrayList。

       // Reading the save data.
       File[] fileArray = SaveData.listFiles();
       ArrayList<Integer> al = new ArrayList<Integer>();

       // For each file in the file array
       for (File file2 : fileArray ) {
              FileReader fr = new FileReader(file2);
              al.add (fr.read());
              System.out.println(al); }

代码有效。来自文件的数据被成功读入ArrayList。问题是当我试图总结数组列表的所有元素时。

       int i;
       for(i = 1; i < al.size(); i++) {
       Integer sum = 0;
       sum += al.get(i);
       System.out.println("The sum is: " + sum);

代码显示此输出:

[1]
[1, 1]
[1, 1, 3]
[1, 1, 3, 3]
The sum is: 1
The sum is: 3
The sum is: 3

代码出了什么问题?

2 个答案:

答案 0 :(得分:7)

你已经在你的循环中声明了sum - 所以你每次迭代都会重新开始。你想要:

int sum = 0;
for(int i = 0; i < al.size(); i++) {
   sum += al.get(i);
}
System.out.println("The sum is: " + sum);

请注意:

  • 我已将sum更改为int而不是Integer;没有必要Integer When to use Int vs Integer
  • 使用{{1}}
  • 我已将循环的下限更改为0而不是1
  • 如果您愿意,您仍然可以使用增强型循环...(我通常会这样做)
  • 使用Java 8,您可以使用流来简化它

答案 1 :(得分:2)

对于一个你从i = 1而不是正确的i = 0开始的人。 您每次都在循环中重新初始化sum