数组和读写文本文件问题 - Java

时间:2014-05-29 13:42:45

标签: java arrays file arraylist buffer

这是我要做的......

  • 输入文件:dishin.txt

  • 输出文件:dishout.txt

  • 时间限制:1秒

你不喜欢统计学家,统计学家不喜欢你。自从那个生命精算师在你四岁时将沙子踢进你的冰淇淋之后,你就已经对那些数字嘎吱嘎吱的混蛋进行了一场缓慢升级的战争。但所有这一切都将要改变。

在经历了许多不眠之夜之后,你已经设想了最终的复仇:在他们自己的游戏中击败他们。使用您的计算机编程技能,您将编写一个免费的统计软件包,如此彻底,如此完整,全世界的统计人员都将失业。它将能够预测天气模式,计算预期寿命,甚至可以玩完美的扑克游戏。

首先,您必须实现自动换行。然而,这个任务相当笨拙,本质上不是很数学,最终不是很重要。更迫切的是,您还需要实施一些基本的数据分析。具体来说,您决定编写一个测试程序来获取数据集(整数列表)并计算以下传播度量:

  • 最低 - 列表中的最小值。例如,数字{5, 6, 5, 3}的最小值为3

  • 最高 - 列表中的最大值。例如,数字{5,6,5,3}中的最大值为6.

  • 平均值(或平均值) - 定义为列表中所有内容的总和除以列表中的项目数。例如,数字{5, 6, 5, 3}的平均值为(5+6+5+3)/4 = 19/4 = 4.75。但是为简单起见,要求将所有答案四舍五入到最接近的整数。因此,向下舍入的数字{5, 6, 3, 3}的平均值为4

输入:

第一行输入将包含单个整数n(1 <= n <= 1,000),即数据集的大小。以下n行将描述数据集。每行包含0到1,000,000之间的整数。

输出

输出文件应由三个以空格分隔的整数组成:数据集的最小值,最大值和平均值。

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;


public class Solution {

public static void main(String[] args) throws IOException {

    ///home/sebastian/workspace/Informatics Competition/src/

    Scanner input = new Scanner(new File("/home/sebastian/workspace/Informatics Competition/src/dishin.txt"));
    BufferedWriter output = new BufferedWriter(new FileWriter("/home/sebastian/workspace/Informatics Competition/src/dishout.txt"));

    ArrayList<Integer> numbers = new ArrayList<Integer>();

    while(input.hasNextInt()) {
        numbers.add(input.nextInt());
    }

    numbers.remove(0);
    Object max = Collections.max(numbers);
    Object min = Collections.min(numbers);

    System.out.println(numbers);

    int sum = 0;

    for (int i = 0; i<=numbers.size(); i++) {
        sum += (int)(numbers.get(i));

    }

    int mean = (int)(sum / numbers.size());

    output.write(String.valueOf(min+" "+max+" "+mean));

    input.close();
    output.close();

}

}

这是错误:

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 4, Size: 4
    at java.util.ArrayList.rangeCheck(ArrayList.java:638)
    at java.util.ArrayList.get(ArrayList.java:414)
    at Solution.main(Solution.java:35)

1 个答案:

答案 0 :(得分:3)

应该是

for (int i = 0; i<numbers.size(); i++) 

而不是

for (int i = 0; i<=numbers.size(); i++) 

index必须小于数字的大小。索引从0开始直到(size-1)

如果您有兴趣迭代数组的每个项目,请使用The For-Each Loop来避免此类问题。

For-each循环(Advanced或Enhanced For循环):

Java5中引入的for-each循环。它主要用于遍历数组或集合元素。 for-each循环的优点是它消除了bug的可能性并使代码更具可读性

for-each循环的语法:

for(data_type variable : array | collection){}