【发布时间】:2014-07-19 01:07:31
【问题描述】:
这是我必须做的……
-
输入文件: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
输出
输出文件应包含三个用空格分隔的整数:数据集的最小值、最大值和平均值。
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)
【问题讨论】:
标签: java arrays file arraylist buffer